refs #585, utility function to make directory path relative and find first file existing

This commit is contained in:
Klaus Basan
2016-06-11 02:09:21 +02:00
parent 04d5239300
commit a848d2ce68
2 changed files with 39 additions and 0 deletions

View File

@@ -121,6 +121,26 @@ namespace BlackMisc
return n;
}
QStringList CFileUtils::makeDirectoriesRelative(const QStringList &directories, const QString &rootDirectory, Qt::CaseSensitivity cs)
{
if (rootDirectory.isEmpty() || rootDirectory == "/") { return directories; }
const QString rd(rootDirectory.endsWith('/') ? rootDirectory.left(rootDirectory.length() - 1) : rootDirectory);
const int p = rd.length();
QStringList relativeDirectories;
for (const QString &dir : directories)
{
if (dir.startsWith(rd, cs) && dir.length() > p + 1)
{
relativeDirectories.append(dir.mid(p + 1));
}
else
{
relativeDirectories.append(dir); // absolute
}
}
return relativeDirectories;
}
Qt::CaseSensitivity CFileUtils::osFileNameCaseSensitivity()
{
return CBuildConfig::isRunningOnWindowsNtPlatform() ? Qt::CaseInsensitive : Qt::CaseSensitive;
@@ -159,6 +179,19 @@ namespace BlackMisc
return false;
}
QString CFileUtils::findFirstExisting(const QStringList &filesOrDirectory)
{
if (filesOrDirectory.isEmpty()) { return ""; }
for (const QString &f : filesOrDirectory)
{
if (f.isEmpty()) { continue; }
const QString fn(normalizeFilePathToQtStandard(f));
const QFileInfo fi(fn);
if (fi.exists()) { return fi.absoluteFilePath(); }
}
return "";
}
QString CFileUtils::findFirstFile(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories, std::function<bool(const QFileInfo &)> predicate)
{
if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); }