diff --git a/samples/blackmisc/main.cpp b/samples/blackmisc/main.cpp index 1792670ed..76437389e 100644 --- a/samples/blackmisc/main.cpp +++ b/samples/blackmisc/main.cpp @@ -14,6 +14,7 @@ #include "samplesjson.h" #include "samplesmetadata.h" #include "samplesperformance.h" +#include "samplesfile.h" #include #include @@ -55,9 +56,10 @@ int main(int argc, char *argv[]) qtout << "6f .. string concatenation (+=, arg, ..)" << endl; qtout << "6g .. const &QString vs. QStringLiteral" << endl; qtout << "7 .. Algorithms" << endl; + qtout << "8 .. File/Directory" << endl; qtout << "-----" << endl; qtout << "x .. Bye" << endl; - QString s = qtin.readLine().toLower().trimmed(); + const QString s = qtin.readLine().toLower().trimmed(); if (s.startsWith("1")) { CSamplesJson::samples(); } else if (s.startsWith("2")) { CSamplesChangeObject::samples(); } @@ -72,6 +74,7 @@ int main(int argc, char *argv[]) else if (s.startsWith("6f")) { CSamplesPerformance::samplesStringConcat(qtout); } else if (s.startsWith("6g")) { CSamplesPerformance::samplesStringLiteralVsConstQString(qtout); } else if (s.startsWith("7")) { CSamplesAlgorithm::samples(); } + else if (s.startsWith("8")) { CSamplesFile::samples(qtout); } else if (s.startsWith("x")) { break; } } while (true); diff --git a/samples/blackmisc/samplesfile.cpp b/samples/blackmisc/samplesfile.cpp new file mode 100644 index 000000000..47cf693d5 --- /dev/null +++ b/samples/blackmisc/samplesfile.cpp @@ -0,0 +1,29 @@ +/* Copyright (C) 2019 + * swift Project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, + * or distributed except according to the terms contained in the LICENSE file. + */ + +//! \file +//! \ingroup sampleblackmisc + +#include "samplesfile.h" +#include "blackmisc/directoryutils.h" +#include "blackmisc/stringutils.h" + +using namespace BlackMisc; + +namespace BlackSample +{ + int CSamplesFile::samples(QTextStream &out) + { + const QString dir = "R:/temp"; + out << "Testing directory search " << dir << endl; + const bool f = CDirectoryUtils::containsFileInDir(dir, "*.air", true); + out << "Found " << boolToYesNo(f) << endl; + return 0; + } + +} // namespace diff --git a/samples/blackmisc/samplesfile.h b/samples/blackmisc/samplesfile.h new file mode 100644 index 000000000..3c5983e30 --- /dev/null +++ b/samples/blackmisc/samplesfile.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2019 + * swift Project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, + * or distributed except according to the terms contained in the LICENSE file. + */ + +//! \file +//! \ingroup sampleblackmisc + +#ifndef BLACKSAMPLE_SAMPLESFILE_H +#define BLACKSAMPLE_SAMPLESFILE_H + +#include + +namespace BlackSample +{ + //! Samples for file/directory + class CSamplesFile + { + public: + //! Run the samples + static int samples(QTextStream &out); + }; +} // namespace + +#endif diff --git a/src/blackmisc/directoryutils.cpp b/src/blackmisc/directoryutils.cpp index 1c4625023..514fbf2d8 100644 --- a/src/blackmisc/directoryutils.cpp +++ b/src/blackmisc/directoryutils.cpp @@ -427,9 +427,9 @@ namespace BlackMisc return QUrl::fromPercentEncoding(directory.toUtf8()); } - QStringList CDirectoryUtils::getSubDirectories(const QString &rootDir) + QStringList CDirectoryUtils::getRelativeSubDirectories(const QString &rootDir) { - QDir dir(rootDir); + const QDir dir(rootDir); if (!dir.exists()) { return QStringList(); } return dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); } @@ -443,10 +443,11 @@ namespace BlackMisc if (!directory.entryInfoList(nameFilter, QDir::Files | QDir::NoDot | QDir::NoDotDot).isEmpty()) { return true; } if (!recursively) { return false; } - const QStringList subDirs = CDirectoryUtils::getSubDirectories(dir); - for (const QString &subDir : subDirs) + const QStringList relSubDirs = CDirectoryUtils::getRelativeSubDirectories(dir); + for (const QString &relSubDir : relSubDirs) { - if (CDirectoryUtils::containsFileInDir(subDir, filter, recursively)) { return true; } + const QString absSubDir = CFileUtils::appendFilePaths(directory.absolutePath(), relSubDir); + if (CDirectoryUtils::containsFileInDir(absSubDir, filter, recursively)) { return true; } } return false; } @@ -686,7 +687,7 @@ namespace BlackMisc if (nestedDirs) { - const QStringList relativeSubdirs = CDirectoryUtils::getSubDirectories(dirSource); + const QStringList relativeSubdirs = CDirectoryUtils::getRelativeSubDirectories(dirSource); if (!relativeSubdirs.isEmpty()) { for (const QString &relativeSubdir : relativeSubdirs) diff --git a/src/blackmisc/directoryutils.h b/src/blackmisc/directoryutils.h index 304fdaf10..4c92edd2a 100644 --- a/src/blackmisc/directoryutils.h +++ b/src/blackmisc/directoryutils.h @@ -155,7 +155,7 @@ namespace BlackMisc static QString decodeNormalizedDirectory(const QString &directory); //! All sub directories of given dir - static QStringList getSubDirectories(const QString &rootDir); + static QStringList getRelativeSubDirectories(const QString &rootDir); //! Any file with filter like "*.txt" static bool containsFileInDir(const QString &dir, const QString &filter, bool recursively);