/** * Returns list of files of problems and results. */ QFileInfoList ProjectBase::casesFiles() { QFileInfoList result; for(int i=0;i<_problems->size();i++) result.push_back(_problems->at(i)->entireSavePath()); for(int i=0;i<_results->size();i++) result.push_back(_results->at(i)->entireSavePath()); return result; }
QFileInfoList SignEncryptWizard::resolvedFiles() const { const QStringList files = d->objectsPage->files(); QFileInfoList infos; foreach ( const QString& i, files ) infos.push_back( QFileInfo( i ) ); return infos; }
QFileInfoList SettingApp::readHistoryFile() { m_setting->beginGroup("historyFile"); int size = m_setting->beginReadArray("pathFile"); QFileInfoList list; for(int i = 0; i < size; i++) { m_setting->setArrayIndex(i); list.push_back(m_setting->value("file").toString()); } m_setting->endArray(); m_setting->endGroup(); return qMove(list); }
/** @brief dragEnterEventの直後に呼ばれるイベント */ void HIST::dropEvent(QDropEvent *e) { // toLocal8Bitで渡すとパスに日本語含んでるファイルも読み込める std::string url = e->mimeData()->urls().first().toLocalFile().toLocal8Bit(); QFileInfo fileInfo = QFileInfo(e->mimeData()->urls().first().toLocalFile()); // ディレクトリを入れたらそのディレクトリの中をカレントディレクトリとして使う std::string currentDir; if(fileInfo.isDir()){ currentDir = url; currentDir.append("/"); } // ファイルを入れたらそのファイルのある場所をカレントディレクトリとして使う else{ currentDir = url.substr(0, url.rfind('/')+1); } // リストを作成 QFileInfoList list; if (e->mimeData()->hasUrls()){ for (int i = 0; i < e->mimeData()->urls().size(); i++){ QFileInfo info = e->mimeData()->urls()[i].toLocalFile(); list.push_back(info); } } // 入力前の個数(現在の行数) int prev = item.size(); // 入力ファイルをすべてitemにpush for ( int i = 0; i < list.size(); i++ ){ item.push_back( new QTableWidgetItem(list[i].absoluteFilePath()) ); } // 行数を個数に合わせる ui.tableWidget->setRowCount(item.size()); // テーブルにset for ( int i = 0; i < list.size(); i++ ){ ui.tableWidget->setItem(prev+i, 0, item.at(prev+i) ); } ui.tableWidget->resizeColumnsToContents(); std::string nowItem = url; cv::Mat nowImg = cv::imread(nowItem, 1); calcHistgram(nowImg); calcHistgramHue(nowImg); drawForQtLabel(nowImg, ui.label); }
bool ModPlusDymolaCtrl::compile(const QFileInfoList & moDependencies) { InfoSender::sendCurrentTask("Dymola : Compiling model "+_modModelPlus->modModelName()); //QString logFilePath = _mmoFolder+QDir::separator()+"log.html"; QString logFilePath = _modModelPlus->mmoFolder().absoluteFilePath("buildlog.txt"); //******************** // update dependencies //******************** QFileInfoList moDeps = moDependencies; // 1- add project loaded mo files QFileInfoList projectMoFiles = _project->moFiles(); for(int i=0;i<projectMoFiles.size();i++) if(!moDeps.contains(projectMoFiles.at(i))) moDeps.push_back(projectMoFiles.at(i)); // 2 - remove modelica library from moDependencies since Dymola // automatically loads it moDeps.removeAll(_project->moomc()->getFileOfClass("Modelica")); // compile bool success = Dymola::firstRun(_modModelPlus->moFilePath(),_modModelPlus->modModelName(), _modModelPlus->mmoFolder(),logFilePath,moDeps,_modModelPlus->neededFiles()); // Inform ListInfo::InfoNum iMsg; if(success) iMsg = ListInfo::MODELCOMPILATIONSUCCESS; else iMsg = ListInfo::MODELCOMPILATIONFAIL; // Infos InfoSender::instance()->send(Info(iMsg,_modModelPlus->modModelName(),logFilePath)); InfoSender::instance()->eraseCurrentTask(); return success; }
int main(int argc, char *argv[]) { QString workDir; #ifdef Q_OS_MAC if (QDir(QString()).absolutePath() == "/") { QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString(); if (!first.isEmpty()) { QFileInfo info(first); if (info.exists()) { QDir result(info.absolutePath() + "/../../.."); workDir = result.absolutePath() + '/'; } } } #endif QString remove; int version = 0; QFileInfoList files; for (int i = 0; i < argc; ++i) { if (string("-path") == argv[i] && i + 1 < argc) { QString path = workDir + QString(argv[i + 1]); QFileInfo info(path); files.push_back(info); if (remove.isEmpty()) remove = info.canonicalPath() + "/"; } else if (string("-version") == argv[i] && i + 1 < argc) { version = QString(argv[i + 1]).toInt(); } else if (string("-dev") == argv[i]) { DevChannel = true; } else if (string("-beta") == argv[i] && i + 1 < argc) { BetaVersion = QString(argv[i + 1]).toULongLong(); if (BetaVersion > version * 1000ULL && BetaVersion < (version + 1) * 1000ULL) { DevChannel = false; BetaSignature = countBetaVersionSignature(BetaVersion); if (BetaSignature.isEmpty()) { return -1; } } else { cout << "Bad -beta param value passed, should be for the same version: " << version << ", beta: " << BetaVersion << "\n"; return -1; } } } if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999999) { #ifdef Q_OS_WIN cout << "Usage: Packer.exe -path {file} -version {version} OR Packer.exe -path {dir} -version {version}\n"; #elif defined Q_OS_MAC cout << "Usage: Packer.app -path {file} -version {version} OR Packer.app -path {dir} -version {version}\n"; #else cout << "Usage: Packer -path {file} -version {version} OR Packer -path {dir} -version {version}\n"; #endif return -1; } bool hasDirs = true; while (hasDirs) { hasDirs = false; for (QFileInfoList::iterator i = files.begin(); i != files.end(); ++i) { QFileInfo info(*i); QString fullPath = info.canonicalFilePath(); if (info.isDir()) { hasDirs = true; files.erase(i); QDir d = QDir(info.absoluteFilePath()); QString fullDir = d.canonicalPath(); QStringList entries = d.entryList(QDir::Files | QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot); files.append(d.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot)); break; } else if (!info.isReadable()) { cout << "Can't read: " << info.absoluteFilePath().toUtf8().constData() << "\n"; return -1; } else if (info.isHidden()) { hasDirs = true; files.erase(i); break; } } } for (QFileInfoList::iterator i = files.begin(); i != files.end(); ++i) { QFileInfo info(*i); if (!info.canonicalFilePath().startsWith(remove)) { cout << "Can't find '" << remove.toUtf8().constData() << "' in file '" << info.canonicalFilePath().toUtf8().constData() << "' :(\n"; return -1; } } QByteArray result; { QBuffer buffer(&result); buffer.open(QIODevice::WriteOnly); QDataStream stream(&buffer); stream.setVersion(QDataStream::Qt_5_1); if (BetaVersion) { stream << quint32(0x7FFFFFFF); stream << quint64(BetaVersion); } else { stream << quint32(version); } stream << quint32(files.size()); cout << "Found " << files.size() << " file" << (files.size() == 1 ? "" : "s") << "..\n"; for (QFileInfoList::iterator i = files.begin(); i != files.end(); ++i) { QFileInfo info(*i); QString fullName = info.canonicalFilePath(); QString name = fullName.mid(remove.length()); cout << name.toUtf8().constData() << " (" << info.size() << ")\n"; QFile f(fullName); if (!f.open(QIODevice::ReadOnly)) { cout << "Can't open '" << fullName.toUtf8().constData() << "' for read..\n"; return -1; } QByteArray inner = f.readAll(); stream << name << quint32(inner.size()) << inner; #if defined Q_OS_MAC || defined Q_OS_LINUX stream << (QFileInfo(fullName).isExecutable() ? true : false); #endif } if (stream.status() != QDataStream::Ok) { cout << "Stream status is bad: " << stream.status() << "\n"; return -1; } } int32 resultSize = result.size(); cout << "Compression start, size: " << resultSize << "\n"; QByteArray compressed, resultCheck; #ifdef Q_OS_WIN // use Lzma SDK for win const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size size_t compressedLen = compressed.size() - hSize; size_t outPropsSize = LZMA_PROPS_SIZE; uchar *_dest = (uchar*)(compressed.data() + hSize); size_t *_destLen = &compressedLen; const uchar *_src = (const uchar*)(result.constData()); size_t _srcLen = result.size(); uchar *_outProps = (uchar*)(compressed.data() + hSigLen + hShaLen); int res = LzmaCompress(_dest, _destLen, _src, _srcLen, _outProps, &outPropsSize, 9, 64 * 1024 * 1024, 4, 0, 2, 273, 2); if (res != SZ_OK) { cout << "Error in compression: " << res << "\n"; return -1; } compressed.resize(int(hSize + compressedLen)); memcpy(compressed.data() + hSigLen + hShaLen + hPropsLen, &resultSize, hOriginalSizeLen); cout << "Compressed to size: " << compressedLen << "\n"; cout << "Checking uncompressed..\n"; int32 resultCheckLen; memcpy(&resultCheckLen, compressed.constData() + hSigLen + hShaLen + hPropsLen, hOriginalSizeLen); if (resultCheckLen <= 0 || resultCheckLen > 1024 * 1024 * 1024) { cout << "Bad result len: " << resultCheckLen << "\n"; return -1; } resultCheck.resize(resultCheckLen); size_t resultLen = resultCheck.size(); SizeT srcLen = compressedLen; int uncompressRes = LzmaUncompress((uchar*)resultCheck.data(), &resultLen, (const uchar*)(compressed.constData() + hSize), &srcLen, (const uchar*)(compressed.constData() + hSigLen + hShaLen), LZMA_PROPS_SIZE); if (uncompressRes != SZ_OK) { cout << "Uncompress failed: " << uncompressRes << "\n"; return -1; } if (resultLen != size_t(result.size())) { cout << "Uncompress bad size: " << resultLen << ", was: " << result.size() << "\n"; return -1; } #else // use liblzma for others const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size size_t compressedLen = compressed.size() - hSize; lzma_stream stream = LZMA_STREAM_INIT; int preset = 9 | LZMA_PRESET_EXTREME; lzma_ret ret = lzma_easy_encoder(&stream, preset, LZMA_CHECK_CRC64); if (ret != LZMA_OK) { const char *msg; switch (ret) { case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; default: msg = "Unknown error, possibly a bug"; break; } cout << "Error initializing the encoder: " << msg << " (error code " << ret << ")\n"; return -1; } stream.avail_in = resultSize; stream.next_in = (uint8_t*)result.constData(); stream.avail_out = compressedLen; stream.next_out = (uint8_t*)(compressed.data() + hSize); lzma_ret res = lzma_code(&stream, LZMA_FINISH); compressedLen -= stream.avail_out; lzma_end(&stream); if (res != LZMA_OK && res != LZMA_STREAM_END) { const char *msg; switch (res) { case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; case LZMA_DATA_ERROR: msg = "File size limits exceeded"; break; default: msg = "Unknown error, possibly a bug"; break; } cout << "Error in compression: " << msg << " (error code " << res << ")\n"; return -1; } compressed.resize(int(hSize + compressedLen)); memcpy(compressed.data() + hSigLen + hShaLen, &resultSize, hOriginalSizeLen); cout << "Compressed to size: " << compressedLen << "\n"; cout << "Checking uncompressed..\n"; int32 resultCheckLen; memcpy(&resultCheckLen, compressed.constData() + hSigLen + hShaLen, hOriginalSizeLen); if (resultCheckLen <= 0 || resultCheckLen > 1024 * 1024 * 1024) { cout << "Bad result len: " << resultCheckLen << "\n"; return -1; } resultCheck.resize(resultCheckLen); size_t resultLen = resultCheck.size(); stream = LZMA_STREAM_INIT; ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED); if (ret != LZMA_OK) { const char *msg; switch (ret) { case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; default: msg = "Unknown error, possibly a bug"; break; } cout << "Error initializing the decoder: " << msg << " (error code " << ret << ")\n"; return -1; } stream.avail_in = compressedLen; stream.next_in = (uint8_t*)(compressed.constData() + hSize); stream.avail_out = resultLen; stream.next_out = (uint8_t*)resultCheck.data(); res = lzma_code(&stream, LZMA_FINISH); if (stream.avail_in) { cout << "Error in decompression, " << stream.avail_in << " bytes left in _in of " << compressedLen << " whole.\n"; return -1; } else if (stream.avail_out) { cout << "Error in decompression, " << stream.avail_out << " bytes free left in _out of " << resultLen << " whole.\n"; return -1; } lzma_end(&stream); if (res != LZMA_OK && res != LZMA_STREAM_END) { const char *msg; switch (res) { case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break; case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break; case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break; case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break; default: msg = "Unknown error, possibly a bug"; break; } cout << "Error in decompression: " << msg << " (error code " << res << ")\n"; return -1; } #endif if (memcmp(result.constData(), resultCheck.constData(), resultLen)) { cout << "Data differ :(\n"; return -1; } /**/ result = resultCheck = QByteArray(); cout << "Counting SHA1 hash..\n"; uchar sha1Buffer[20]; memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, uint32(compressedLen + hPropsLen + hOriginalSizeLen), sha1Buffer), hShaLen); // count sha1 uint32 siglen = 0; cout << "Signing..\n"; RSA *prKey = PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(const_cast<char*>((DevChannel || BetaVersion) ? PrivateDevKey : PrivateKey), -1), 0, 0, 0); if (!prKey) { cout << "Could not read RSA private key!\n"; return -1; } if (RSA_size(prKey) != hSigLen) { cout << "Bad private key, size: " << RSA_size(prKey) << "\n"; RSA_free(prKey); return -1; } if (RSA_sign(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (uchar*)(compressed.data()), &siglen, prKey) != 1) { // count signature cout << "Signing failed!\n"; RSA_free(prKey); return -1; } RSA_free(prKey); if (siglen != hSigLen) { cout << "Bad signature length: " << siglen << "\n"; return -1; } cout << "Checking signature..\n"; RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>((DevChannel || BetaVersion) ? PublicDevKey : PublicKey), -1), 0, 0, 0); if (!pbKey) { cout << "Could not read RSA public key!\n"; return -1; } if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), siglen, pbKey) != 1) { // verify signature RSA_free(pbKey); cout << "Signature verification failed!\n"; return -1; } cout << "Signature verified!\n"; RSA_free(pbKey); #ifdef Q_OS_WIN QString outName(QString("tupdate%1").arg(BetaVersion ? BetaVersion : version)); #elif defined Q_OS_MAC QString outName(QString("tmacupd%1").arg(BetaVersion ? BetaVersion : version)); #elif defined Q_OS_LINUX32 QString outName(QString("tlinux32upd%1").arg(BetaVersion ? BetaVersion : version)); #elif defined Q_OS_LINUX64 QString outName(QString("tlinuxupd%1").arg(BetaVersion ? BetaVersion : version)); #else #error Unknown platform! #endif if (BetaVersion) { outName += "_" + BetaSignature; } QFile out(outName); if (!out.open(QIODevice::WriteOnly)) { cout << "Can't open '" << outName.toUtf8().constData() << "' for write..\n"; return -1; } out.write(compressed); out.close(); if (BetaVersion) { QString keyName(QString("tbeta_%1_key").arg(BetaVersion)); QFile key(keyName); if (!key.open(QIODevice::WriteOnly)) { cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n"; return -1; } key.write(BetaSignature.toUtf8()); key.close(); } cout << "Update file '" << outName.toUtf8().constData() << "' written successfully!\n"; return 0; }
bool Dymola::compile(QFileInfo moPath,QString modelToConsider,QDir storeFolder,QFileInfo logFile, const QFileInfoList & moDeps, QFileInfoList neededFiles) { // Create Dymola script QString filePath = storeFolder.absoluteFilePath("MOFirstRun.mos"); QFile file(filePath); if(file.exists()) { file.remove(); } file.open(QIODevice::WriteOnly); QString scriptText; QString curPath; // load dependencies and model QFileInfoList moToLoad; moToLoad.append(moDeps); moToLoad.push_back(moPath); LowTools::removeDuplicates(moToLoad); for(int i=0;i<moToLoad.size();i++) { curPath = QDir::fromNativeSeparators(moToLoad.at(i).absoluteFilePath()); scriptText.append("openModel(\""+curPath+"\",false)\n"); } QString strFolder = QDir::fromNativeSeparators(storeFolder.absolutePath()); QString logFilePath = QDir::fromNativeSeparators(logFile.absoluteFilePath()); scriptText.append("cd "+strFolder+"\n"); scriptText.append("experimentSetupOutput(textual=true)\n"); scriptText.append("Advanced.StoreProtectedVariables:=true;\n"); //scriptText.append("checkModel(\""+modelToConsider+"\",simulate=true)\n"); scriptText.append("translateModel(\""+modelToConsider+"\")\n"); scriptText.append("compile()\n"); scriptText.append("savelog(\""+logFilePath+"\")\n"); scriptText.append("exit\n"); QTextStream ts( &file ); ts << scriptText; file.close(); // Copy needed files LowTools::copyFilesInFolder(neededFiles,storeFolder); // Run script QString dymolaPath = MOSettings::value("dymolaExe").toString(); QFileInfo dymolaBin(dymolaPath); if(!dymolaBin.exists()) { InfoSender::instance()->send(Info("Dymola executable not found. Please verify path in Settings",ListInfo::ERROR2)); return false; } else { // delete previous dymosim.exe QFile dymoFile(storeFolder.absoluteFilePath("dymosim.exe")); if(dymoFile.exists()) dymoFile.remove(); // delete previous dsin file QFile dsinFile(storeFolder.absoluteFilePath("dsin.txt")); if(dsinFile.exists()) dsinFile.remove(); // launch script QProcess scriptProcess; QStringList args; args.push_back(filePath); //start process InfoSender::sendCurrentTask("Launching Dymola..."); scriptProcess.start(dymolaPath,args); bool ok = scriptProcess.waitForFinished(-1); if(!ok) { QString msg("CreateProcess failed"); InfoSender::instance()->debug(msg); return false; } //look if it succeed bool success = dymoFile.exists(); InfoSender::eraseCurrentTask(); return success; } }
bool Dymola::createDsin(QFileInfo moFile,QString modelToConsider,QDir folder, const QFileInfoList & moDeps,QFileInfoList neededFiles) { // Create Dymola script QFile file(folder.absoluteFilePath("MOFirstRun.mos")); if(file.exists()) { file.remove(); } file.open(QIODevice::WriteOnly); QString strFolder = QDir::fromNativeSeparators(folder.absolutePath()); QString scriptText; QString curPath; // load dependencies and model QFileInfoList moToLoad; moToLoad.append(moDeps); moToLoad.push_back(moFile); LowTools::removeDuplicates(moToLoad); for(int i=0;i<moToLoad.size();i++) { curPath = QDir::fromNativeSeparators(moToLoad.at(i).absoluteFilePath()); scriptText.append("openModel(\""+curPath+"\")\n"); } scriptText.append("cd "+strFolder+"\n"); scriptText.append("translateModel(\""+modelToConsider+"\")\n"); scriptText.append("exportInitialDsin(\"dsin.txt\")\n"); scriptText.append("savelog(\"buildlog.txt\")\n"); scriptText.append("exit\n"); QTextStream ts( &file ); ts << scriptText; file.close(); // Copy needed files LowTools::copyFilesInFolder(neededFiles,folder); // Run script QString dymolaPath = MOSettings::value("dymolaExe").toString(); QProcess simProcess; QStringList args; args.push_back(QFileInfo(file).absoluteFilePath()); // delete previous dsin file QFile dsinFile(folder.absoluteFilePath("dsin.txt")); if(dsinFile.exists()) dsinFile.remove(); // launch script InfoSender::instance()->send(Info("Launching Dymola...")); simProcess.start(dymolaPath, args); bool ok = simProcess.waitForFinished(-1); if(!ok) { QString msg("CreateProcess failed"); InfoSender::instance()->debug(msg); return false; } //look if it succeed bool success = dsinFile.exists(); return success; }
void OsmAnd::ObfsCollection_P::refreshSources() { QMutexLocker scopedLock(&_sourcesMutex); // Find all files that are present in watched entries QFileInfoList obfs; { QMutexLocker scopedLock(&_watchedCollectionMutex); for(auto itEntry = _watchedCollection.begin(); itEntry != _watchedCollection.end(); ++itEntry) { const auto& entry = *itEntry; if(entry->type == WatchEntry::WatchedDirectory) { auto watchedDirEntry = static_cast<WatchedDirectoryEntry*>(entry.get()); Utilities::findFiles(watchedDirEntry->dir, QStringList() << "*.obf", obfs, watchedDirEntry->recursive); } else if(entry->type == WatchEntry::ExplicitFile) { auto explicitFileEntry = static_cast<ExplicitFileEntry*>(entry.get()); if(explicitFileEntry->fileInfo.exists()) obfs.push_back(explicitFileEntry->fileInfo); } } } // For each file in registry, ... { QMutableHashIterator< QString, std::shared_ptr<ObfFile> > itObfFileEntry(_sources); while(itObfFileEntry.hasNext()) { // ... which does not exist, ... if(QFile::exists(itObfFileEntry.key())) { itObfFileEntry.next(); continue; } // ... remove entry itObfFileEntry.remove(); } } // For each file, ... for(auto itObfFileInfo = obfs.begin(); itObfFileInfo != obfs.end(); ++itObfFileInfo) { const auto& obfFileInfo = *itObfFileInfo; const auto& obfFilePath = obfFileInfo.canonicalFilePath(); auto itObfFileEntry = _sources.find(obfFilePath); // ... which is not yet present in registry, ... if(itObfFileEntry == _sources.end()) { // ... create ObfFile auto obfFile = new ObfFile(obfFilePath); itObfFileEntry = _sources.insert(obfFilePath, std::shared_ptr<ObfFile>(obfFile)); } } // Mark that sources were refreshed at least once _sourcesRefreshedOnce = true; }
LocalProcess::FileSet LocalProcess::dirFiles(const QString &dir) const { QFileInfoList fil; QDir subdirs(dir, "mergedjob-*", QDir::Name, QDir::Dirs); QFileInfoList mergedjobdirs = subdirs.entryInfoList(); for (QFileInfoList::const_iterator itr = mergedjobdirs.begin(); itr != mergedjobdirs.end(); ++itr) { QDir mergeddir(itr->absoluteFilePath(), "", QDir::Name, QDir::Files); fil.append(mergeddir.entryInfoList()); } QDir d(dir, "", QDir::Name, QDir::Files); fil.append(d.entryInfoList()); QFileInfoList filtered; // Filter out all files that are part of the set of input files. Everything remaining should be an outputfile for (QFileInfoList::const_iterator itr = fil.begin(); itr != fil.end(); ++itr) { bool partofinput = false; for (std::vector<std::pair<openstudio::path, openstudio::path> >::const_iterator itr2 = m_requiredFiles.begin(); itr2 != m_requiredFiles.end(); ++itr2) { QString fileName = itr->fileName(); QString fileName2 = toQString(itr2->second.filename()); if (fileName == fileName2) { partofinput = true; break; } } if (!partofinput) { filtered.push_back(*itr); } } FileSet out; typedef FileInfo (*filetransform)(QFileInfo); try{ std::transform(filtered.begin(), filtered.end(), std::inserter(out, out.end()), static_cast<filetransform>(&RunManager_Util::dirFile)); } catch(openstudio::Exception& e) { LOG_AND_THROW("Exception caught " << e.what()); } return out; }