/*! Opens this file in \a mode. Note that only QIODevice::ReadWrite and QIODevice::WriteOnly are supported. */ bool KDSaveFile::open( OpenMode mode ) { setOpenMode( QIODevice::NotOpen ); if ( mode & QIODevice::Append ) { setErrorString( tr("Append mode not supported.") ); return false; } if ( ( mode & QIODevice::WriteOnly ) == 0 ) { setErrorString( tr("Read-only access not supported.") ); return false; } const QFile f( d->filename ); if ( f.exists() && !QFileInfo( d->filename ).isWritable() ) { setErrorString( tr("The target file %1 exists and is not writable").arg( d->filename ) ); return false; } const bool opened = d->recreateTemporaryFile( mode ); if( opened ) setOpenMode( mode ); if( f.exists() ) d->tmpFile->setPermissions( f.permissions() ); //if target file already exists, apply permissions of existing file to temp file return opened; }
bool Gcc::run(QString filename) { if(!compile(filename)) return false; QString outputString; QFileInfo outputFileInfo(m_outputFileName); QFile scriptFile; #ifdef Q_OS_WIN32 scriptFile.setFileName(QDir::temp().absoluteFilePath("kiprBatchFile.cmd")); outputString += "@echo off\n"; outputString += "\"" + QDir::toNativeSeparators(outputFileInfo.absolutePath()) + "\\" + outputFileInfo.fileName() + "\"\n"; outputString += "pause\n"; #else scriptFile.setFileName(QDir::temp().absoluteFilePath("kiprScript.sh")); outputString += "#!/bin/bash\n"; outputString += "cd \"" + outputFileInfo.absolutePath() + "\"\n"; outputString += "\"./" + outputFileInfo.fileName() + "\"\n"; #endif if(!scriptFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { qWarning("Gcc::run() Unable to open temp file for writing"); return false; } scriptFile.setPermissions(scriptFile.permissions() | QFile::ExeOwner); scriptFile.write(outputString.toLocal8Bit()); scriptFile.close(); QStringList args; QFileInfo scriptInfo(scriptFile); m_outputBinary.setWorkingDirectory(outputFileInfo.absolutePath()); #ifdef Q_OS_WIN32 QString startLine = "start \"" + m_outputFileName + "\" \"cmd /c " + scriptInfo.absoluteFilePath() + "\"\n"; args << "/k"; m_outputBinary.start("cmd", args); m_outputBinary.write(startLine.toLocal8Bit()); m_outputBinary.write("exit\n"); #elif defined(Q_OS_MAC) args << "-a" << "/Applications/Utilities/Terminal.app" << scriptInfo.absoluteFilePath(); m_outputBinary.start("open", args); #else args << "-e" << scriptInfo.absoluteFilePath() + " && echo \"\nQuitting in 5 secs...\" && sleep 5"; m_outputBinary.start("xterm", args); #endif return true; }
/** \param menu **/ void PluginBl_BloqConf::s_pintaMenu ( QMenu *menu ) { BL_FUNC_DEBUG BlSubForm *sub = (BlSubForm *) sender(); int modo = !sub->editMode(); menu->addSeparator(); QAction * ac = new QAction("Bloqueo Configuracion" , menu); ac->setObjectName("actionBloqueoConfiguracion"); ac -> setCheckable(TRUE); QString archivo = g_confpr->value( CONF_DIR_USER ) + sub->fileConfig() + "_" + sub->mainCompany()->dbName() + "_" + QString::number ( modo ) + "_tablecfn.cfn"; QFile file ( archivo ); if (file.permissions() & QFile::WriteOwner) { ac->setChecked(FALSE); } else { ac->setChecked(TRUE); } // end if menu->addAction ( ac ); }
void KSaveFileTest::test_ksavefile() { QString targetFile; { //This will be the file we eventually write to. Yes, I know you //should never remove the temporaryfile and then expect the filename //to continue to be unique, but this is a test for crying out loud. :) KTemporaryFile file; file.setPrefix("ksavefiletest"); QVERIFY( file.open() ); targetFile = file.fileName(); } { //Test basic functionality KSaveFile saveFile; saveFile.setFileName(targetFile); QVERIFY( saveFile.open() ); QVERIFY( !QFile::exists(targetFile) ); QTextStream ts ( &saveFile ); ts << "This is test data one.\n"; ts.flush(); QCOMPARE( saveFile.error(), QFile::NoError ); QVERIFY( !QFile::exists(targetFile) ); QVERIFY( saveFile.finalize() ); QVERIFY( QFile::exists(targetFile) ); QFile::remove(targetFile); QVERIFY( !QFile::exists(targetFile) ); } { //Make sure destructor does what it is supposed to do. { KSaveFile saveFile; saveFile.setFileName(targetFile); QVERIFY( saveFile.open() ); QVERIFY( !QFile::exists(targetFile) ); } QVERIFY( QFile::exists(targetFile) ); QFile::remove(targetFile); QVERIFY( !QFile::exists(targetFile) ); } { //Test some error conditions KSaveFile saveFile; QVERIFY( !saveFile.open() ); //no filename saveFile.setFileName(targetFile); QVERIFY( saveFile.open() ); QVERIFY( !QFile::exists(targetFile) ); QVERIFY( !saveFile.open() ); //already open QVERIFY( saveFile.finalize() ); QVERIFY( QFile::exists(targetFile) ); QVERIFY( !saveFile.finalize() ); //already finalized QFile::remove(targetFile); QVERIFY( !QFile::exists(targetFile) ); } { //Do it again, aborting this time KSaveFile saveFile ( targetFile ); QVERIFY( saveFile.open() ); QVERIFY( !QFile::exists(targetFile) ); QTextStream ts ( &saveFile ); ts << "This is test data two.\n"; ts.flush(); QCOMPARE( saveFile.error(), QFile::NoError ); QVERIFY( !QFile::exists(targetFile) ); saveFile.abort(); QVERIFY( !QFile::exists(targetFile) ); } QFile file ( targetFile ); QVERIFY( file.open(QIODevice::WriteOnly | QIODevice::Text) ); QVERIFY( file.setPermissions( file.permissions() | QFile::ExeUser ) ); file.close(); { //Test how it works when the file already exists //Also check for special permissions KSaveFile saveFile ( targetFile ); QVERIFY( saveFile.open() ); QVERIFY( QFile::exists(targetFile) ); QFileInfo fi ( targetFile ); #ifndef Q_WS_WIN // Windows: qt_ntfs_permission_lookup is not set by default in // qfsfileengine_win.cpp, could change in future Qt versions. QVERIFY( fi.permission( QFile::ExeUser ) ); #endif QVERIFY( fi.size() == 0 ); QTextStream ts ( &saveFile ); ts << "This is test data three.\n"; ts.flush(); fi.refresh(); QVERIFY( fi.size() == 0 ); QVERIFY( saveFile.finalize() ); fi.refresh(); QVERIFY( fi.size() != 0 ); #ifndef Q_WS_WIN QVERIFY( fi.permission( QFile::ExeUser ) ); #endif QFile::remove(targetFile); } { QFileInfo fi ( targetFile ); targetFile = fi.fileName(); QDir::setCurrent(fi.path()); //one more time, this time with relative filenames KSaveFile saveFile ( targetFile ); QVERIFY( saveFile.open() ); QVERIFY( !QFile::exists(targetFile) ); QTextStream ts ( &saveFile ); ts << "This is test data four.\n"; ts.flush(); QCOMPARE( saveFile.error(), QFile::NoError ); QVERIFY( !QFile::exists(targetFile) ); QVERIFY( saveFile.finalize() ); QVERIFY( QFile::exists(targetFile) ); QFile::remove(targetFile); } }