mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-13 07:35:41 +08:00
refs #585, utility function to make directory path relative and find first file existing
This commit is contained in:
@@ -121,6 +121,26 @@ namespace BlackMisc
|
|||||||
return n;
|
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()
|
Qt::CaseSensitivity CFileUtils::osFileNameCaseSensitivity()
|
||||||
{
|
{
|
||||||
return CBuildConfig::isRunningOnWindowsNtPlatform() ? Qt::CaseInsensitive : Qt::CaseSensitive;
|
return CBuildConfig::isRunningOnWindowsNtPlatform() ? Qt::CaseInsensitive : Qt::CaseSensitive;
|
||||||
@@ -159,6 +179,19 @@ namespace BlackMisc
|
|||||||
return false;
|
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)
|
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(); }
|
if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); }
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ namespace BlackMisc
|
|||||||
//! Normalize file path to Qt standard, e.g by turning \ to /
|
//! Normalize file path to Qt standard, e.g by turning \ to /
|
||||||
static QString normalizeFilePathToQtStandard(const QString &filePath);
|
static QString normalizeFilePathToQtStandard(const QString &filePath);
|
||||||
|
|
||||||
|
//! Make directory paths relative to root directory
|
||||||
|
static QStringList makeDirectoriesRelative(const QStringList &directories, const QString &rootDirectory, Qt::CaseSensitivity cs = osFileNameCaseSensitivity());
|
||||||
|
|
||||||
//! Case sensitivity for current OS
|
//! Case sensitivity for current OS
|
||||||
static Qt::CaseSensitivity osFileNameCaseSensitivity();
|
static Qt::CaseSensitivity osFileNameCaseSensitivity();
|
||||||
|
|
||||||
@@ -76,6 +79,9 @@ namespace BlackMisc
|
|||||||
//! Directory to be excluded?
|
//! Directory to be excluded?
|
||||||
static bool isExcludedDirectory(const QString &directoryPath, const QStringList &excludeDirectories, Qt::CaseSensitivity cs = osFileNameCaseSensitivity());
|
static bool isExcludedDirectory(const QString &directoryPath, const QStringList &excludeDirectories, Qt::CaseSensitivity cs = osFileNameCaseSensitivity());
|
||||||
|
|
||||||
|
//! Find first existing file or directory
|
||||||
|
static QString findFirstExisting(const QStringList &filesOrDirectory);
|
||||||
|
|
||||||
//! Returns path to first file in dir which matches the optional wildcard and predicate, or empty string.
|
//! Returns path to first file in dir which matches the optional wildcard and predicate, or empty string.
|
||||||
static QString findFirstFile(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {}, std::function<bool(const QFileInfo &)> predicate = {});
|
static QString findFirstFile(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {}, std::function<bool(const QFileInfo &)> predicate = {});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user