bool FileDialog::folderIsWritable( const QString &folder ) { #ifdef Q_OS_WIN return QTemporaryFile( folder + "/.XXXXXX" ).open(); #else return QFileInfo( folder ).isWritable(); #endif }
bool Common::canWrite( const QString &filename ) { #ifdef Q_OS_WIN32 return QTemporaryFile( QFileInfo( filename ).absolutePath().append( "/XXXXXX" ) ).open(); #else QFileInfo file( filename ); return file.isFile() ? file.isWritable() : QFileInfo( file.absolutePath() ).isWritable(); #endif }
bool IOFactory::isFolderWritable(const QString& folder) { QString real_file = folder; if (!real_file.endsWith(QDir::separator())) { real_file += QDir::separator(); } real_file += "test-permissions-file"; return QTemporaryFile(real_file).open(); }
bool FileDialog::canWrite( const QString &filename ) { QFileInfo i( filename ); if( i.isFile() ) return QFile( filename ).open( QFile::WriteOnly|QFile::Append ); #ifdef Q_OS_WIN return QTemporaryFile( i.absolutePath().append( "/.XXXXXX" ) ).open(); #else return QFileInfo( i.absolutePath() ).isWritable(); #endif }
/*! */ QString Config::findFile(const Location& location, const QStringList& files, const QStringList& dirs, const QString& fileName, QString& userFriendlyFilePath) { if (fileName.isEmpty() || fileName.startsWith(QLatin1Char('/'))) { userFriendlyFilePath = fileName; return fileName; } QFileInfo fileInfo; QStringList components = fileName.split(QLatin1Char('?')); QString firstComponent = components.first(); QStringList::ConstIterator f = files.begin(); while (f != files.end()) { if (*f == firstComponent || (*f).endsWith(QLatin1Char('/') + firstComponent)) { fileInfo.setFile(*f); if (!fileInfo.exists()) location.fatal(tr("File '%1' does not exist").arg(*f)); break; } ++f; } if (fileInfo.fileName().isEmpty()) { QStringList::ConstIterator d = dirs.begin(); while (d != dirs.end()) { fileInfo.setFile(QDir(*d), firstComponent); if (fileInfo.exists()) { break; } ++d; } } userFriendlyFilePath = QString(); if (!fileInfo.exists()) return QString(); QStringList::ConstIterator c = components.begin(); for (;;) { bool isArchive = (c != components.end() - 1); ArchiveExtractor *extractor = 0; QString userFriendly = *c; if (isArchive) { extractor = ArchiveExtractor::extractorForFileName(userFriendly); } if (extractor == 0) { Uncompressor *uncompressor = Uncompressor::uncompressorForFileName(userFriendly); if (uncompressor != 0) { QString fileNameWithCorrectExtension = uncompressor->uncompressedFilePath( fileInfo.filePath()); QString uncompressed = uncompressedFiles[fileInfo.filePath()]; if (uncompressed.isEmpty()) { uncompressed = QTemporaryFile(fileInfo.filePath()).fileName(); uncompressor->uncompressFile(location, fileInfo.filePath(), uncompressed); uncompressedFiles[fileInfo.filePath()] = uncompressed; } fileInfo.setFile(uncompressed); if (isArchive) { extractor = ArchiveExtractor::extractorForFileName( fileNameWithCorrectExtension); } else { userFriendly = fileNameWithCorrectExtension; } } } userFriendlyFilePath += userFriendly; if (isArchive) { if (extractor == 0) location.fatal(tr("Unknown archive type '%1'") .arg(userFriendlyFilePath)); QString extracted = extractedDirs[fileInfo.filePath()]; if (extracted.isEmpty()) { extracted = QTemporaryFile(fileInfo.filePath()).fileName(); if (!QDir().mkdir(extracted)) location.fatal(tr("Cannot create temporary directory '%1'") .arg(extracted)); extractor->extractArchive(location, fileInfo.filePath(), extracted); extractedDirs[fileInfo.filePath()] = extracted; } ++c; fileInfo.setFile(QDir(extracted), *c); } else { break; } userFriendlyFilePath += "?"; } return fileInfo.filePath(); }
QString GpsimProcessor::generateSymbolFile( const QString &fileName, QObject *receiver, const char *successMember, const char * failMember ) { if ( !isValidProgramFile(fileName) ) return QString::null; QString extension = fileName.right( fileName.length() - fileName.lastIndexOf('.') - 1 ).toLower(); if ( extension == "cod" ) { QTimer::singleShot( 0, receiver, successMember ); return fileName; } if ( extension == "hex" ) { QTimer::singleShot( 0, receiver, successMember ); // We've already checked for the existance of the ".cod" file in GpsimProcessor::isValidProgramFile return QString(fileName).replace(".hex",".cod"); } else if ( extension == "basic" || extension == "microbe" ) { compileMicrobe( fileName, receiver, successMember, failMember ); return QString(fileName).replace( "."+extension, ".cod" ); } else if ( extension == "flowcode" ) { const QString hexFile = QTemporaryFile( "tmpXXXXXX.hex" ).fileName(); ProcessOptions o; o.b_addToProject = false; o.setTargetFile( hexFile ); o.setInputFiles( QStringList(fileName) ); o.setMethod( ProcessOptions::Method::Forget ); o.setProcessPath( ProcessOptions::ProcessPath::FlowCode_Program ); ProcessChain * pc = new ProcessChain(o); if (receiver) { if (successMember) connect( pc, SIGNAL(successful()), receiver, successMember ); if (failMember) connect( pc, SIGNAL(failed()), receiver, failMember ); } return QString(hexFile).replace( ".hex", ".cod" ); } else if ( extension == "asm" ) { ProcessOptions o; o.b_addToProject = false; o.setTargetFile( QString(fileName).replace(".asm",".hex")); o.setInputFiles(QStringList(fileName)); o.setMethod( ProcessOptions::Method::Forget ); o.setProcessPath( ProcessOptions::ProcessPath::path( ProcessOptions::guessMediaType(fileName), ProcessOptions::ProcessPath::Program ) ); ProcessChain *pc = new ProcessChain(o); if (receiver) { if (successMember) connect( pc, SIGNAL(successful()), receiver, successMember ); if (failMember) connect( pc, SIGNAL(failed()), receiver, failMember ); } return QString(fileName).replace(".asm",".cod"); } else if ( extension == "c" ) { ProcessOptions o; o.b_addToProject = false; o.setTargetFile( QString(fileName).replace(".c",".hex")); o.setInputFiles(QStringList(fileName)); o.setMethod( ProcessOptions::Method::Forget ); o.setProcessPath( ProcessOptions::ProcessPath::C_Program ); ProcessChain *pc = new ProcessChain(o); if (receiver) { if (successMember) connect( pc, SIGNAL(successful()), receiver, successMember ); if (failMember) connect( pc, SIGNAL(failed()), receiver, failMember ); } return QString(fileName).replace(".c",".cod"); } if ( failMember ) QTimer::singleShot( 0, receiver, failMember ); return QString::null; }