forked from qt-creator/qt-creator
Utils: Add optional recursion for file system iteration
Change-Id: Icded897b129aebd7132376cff55717e16dffc040 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -90,6 +90,7 @@ static FilePath findQmakeInDir(const FilePath &dir)
|
|||||||
const FilePaths candidates = dir.dirEntries(
|
const FilePaths candidates = dir.dirEntries(
|
||||||
BuildableHelperLibrary::possibleQMakeCommands(),
|
BuildableHelperLibrary::possibleQMakeCommands(),
|
||||||
QDir::Files,
|
QDir::Files,
|
||||||
|
QDirIterator::NoIteratorFlags,
|
||||||
QDir::Name | QDir::Reversed);
|
QDir::Name | QDir::Reversed);
|
||||||
for (const FilePath &candidate : candidates) {
|
for (const FilePath &candidate : candidates) {
|
||||||
if (candidate == qmakePath)
|
if (candidate == qmakePath)
|
||||||
|
@@ -37,6 +37,7 @@
|
|||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QDirIterator>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QOperatingSystemVersion>
|
#include <QOperatingSystemVersion>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
@@ -719,26 +720,41 @@ bool FilePath::createDir() const
|
|||||||
|
|
||||||
FilePaths FilePath::dirEntries(const QStringList &nameFilters,
|
FilePaths FilePath::dirEntries(const QStringList &nameFilters,
|
||||||
QDir::Filters filters,
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags,
|
||||||
QDir::SortFlags sort) const
|
QDir::SortFlags sort) const
|
||||||
{
|
{
|
||||||
|
FilePaths result;
|
||||||
|
|
||||||
if (needsDevice()) {
|
if (needsDevice()) {
|
||||||
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
|
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
|
||||||
FilePaths result;
|
|
||||||
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
|
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
|
||||||
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters);
|
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
|
||||||
return result;
|
} else {
|
||||||
|
QDirIterator dit(m_data, nameFilters, filters, flags);
|
||||||
|
while (dit.hasNext())
|
||||||
|
result.append(FilePath::fromString(dit.next()));
|
||||||
}
|
}
|
||||||
|
|
||||||
const QFileInfoList entryInfoList = QDir(m_data).entryInfoList(nameFilters, filters, sort);
|
// FIXME: Not all flags supported here.
|
||||||
return Utils::transform(entryInfoList, &FilePath::fromFileInfo);
|
|
||||||
|
if ((sort & QDir::SortByMask) == QDir::Name)
|
||||||
|
Utils::sort(result);
|
||||||
|
|
||||||
|
if (sort & QDir::Reversed)
|
||||||
|
std::reverse(result.begin(), result.end());
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FilePaths FilePath::dirEntries(QDir::Filters filters) const
|
||||||
QList<FilePath> FilePath::dirEntries(QDir::Filters filters) const
|
|
||||||
{
|
{
|
||||||
return dirEntries({}, filters);
|
return dirEntries({}, filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This runs \a callBack on each directory entry matching all \a filters and
|
||||||
|
// either of the specified \a nameFilters.
|
||||||
|
// An empty \nameFilters list matches every name.
|
||||||
|
|
||||||
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters,
|
QDir::Filters filters,
|
||||||
@@ -746,14 +762,15 @@ void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)>
|
|||||||
{
|
{
|
||||||
if (needsDevice()) {
|
if (needsDevice()) {
|
||||||
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
|
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
|
||||||
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters);
|
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDirIterator it(m_data, nameFilters, filters, flags);
|
QDirIterator it(m_data, nameFilters, filters, flags);
|
||||||
while (it.hasNext())
|
while (it.hasNext()) {
|
||||||
if (!callBack(FilePath::fromString(it.next())))
|
if (!callBack(FilePath::fromString(it.next())))
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray FilePath::fileContents(qint64 maxSize, qint64 offset) const
|
QByteArray FilePath::fileContents(qint64 maxSize, qint64 offset) const
|
||||||
|
@@ -123,6 +123,7 @@ public:
|
|||||||
bool createDir() const;
|
bool createDir() const;
|
||||||
QList<FilePath> dirEntries(const QStringList &nameFilters,
|
QList<FilePath> dirEntries(const QStringList &nameFilters,
|
||||||
QDir::Filters filters = QDir::NoFilter,
|
QDir::Filters filters = QDir::NoFilter,
|
||||||
|
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags,
|
||||||
QDir::SortFlags sort = QDir::NoSort) const;
|
QDir::SortFlags sort = QDir::NoSort) const;
|
||||||
QList<FilePath> dirEntries(QDir::Filters filters) const;
|
QList<FilePath> dirEntries(QDir::Filters filters) const;
|
||||||
QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const;
|
QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const;
|
||||||
|
@@ -83,7 +83,8 @@ public:
|
|||||||
std::function<void(const FilePath &,
|
std::function<void(const FilePath &,
|
||||||
const std::function<bool(const FilePath &)> &, // Abort on 'false' return.
|
const std::function<bool(const FilePath &)> &, // Abort on 'false' return.
|
||||||
const QStringList &,
|
const QStringList &,
|
||||||
QDir::Filters)> iterateDirectory;
|
QDir::Filters,
|
||||||
|
QDirIterator::IteratorFlags)> iterateDirectory;
|
||||||
std::function<QByteArray(const FilePath &, qint64, qint64)> fileContents;
|
std::function<QByteArray(const FilePath &, qint64, qint64)> fileContents;
|
||||||
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
||||||
std::function<QDateTime(const FilePath &)> lastModified;
|
std::function<QDateTime(const FilePath &)> lastModified;
|
||||||
|
@@ -948,7 +948,10 @@ FilePath FileApiParser::scanForCMakeReplyFile(const FilePath &buildDirectory)
|
|||||||
if (!replyDir.exists())
|
if (!replyDir.exists())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const FilePaths entries = replyDir.dirEntries({"index-*.json"}, QDir::Files, QDir::Name);
|
const FilePaths entries = replyDir.dirEntries({"index-*.json"},
|
||||||
|
QDir::Files,
|
||||||
|
QDirIterator::NoIteratorFlags,
|
||||||
|
QDir::Name);
|
||||||
return entries.isEmpty() ? FilePath() : entries.first();
|
return entries.isEmpty() ? FilePath() : entries.first();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1547,8 +1547,11 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
void DockerDevice::iterateDirectory(const FilePath &filePath,
|
void DockerDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(flags) // FIXME: Use it.
|
||||||
|
|
||||||
QTC_ASSERT(handlesFile(filePath), return);
|
QTC_ASSERT(handlesFile(filePath), return);
|
||||||
updateContainerAccess();
|
updateContainerAccess();
|
||||||
if (hasLocalFileAccess()) {
|
if (hasLocalFileAccess()) {
|
||||||
|
@@ -97,7 +97,8 @@ public:
|
|||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const override;
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const override;
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
||||||
|
@@ -304,7 +304,8 @@ static McuPackage *createCypressProgrammerPackage()
|
|||||||
const FilePath candidate = findInProgramFiles("Cypress");
|
const FilePath candidate = findInProgramFiles("Cypress");
|
||||||
if (candidate.exists()) {
|
if (candidate.exists()) {
|
||||||
// "Cypress Auto Flash Utility 1.0"
|
// "Cypress Auto Flash Utility 1.0"
|
||||||
const auto subDirs = candidate.dirEntries({"Cypress Auto Flash Utility*"}, QDir::Dirs, QDir::Unsorted);
|
const auto subDirs = candidate.dirEntries({"Cypress Auto Flash Utility*"},
|
||||||
|
QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
|
||||||
if (!subDirs.empty())
|
if (!subDirs.empty())
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
@@ -330,7 +331,8 @@ static McuPackage *createRenesasProgrammerPackage()
|
|||||||
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
|
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
|
||||||
if (candidate.exists()) {
|
if (candidate.exists()) {
|
||||||
// "Renesas Flash Programmer V3.09"
|
// "Renesas Flash Programmer V3.09"
|
||||||
const auto subDirs = candidate.dirEntries({"Renesas Flash Programmer*"}, QDir::Dirs, QDir::Unsorted);
|
const auto subDirs = candidate.dirEntries({"Renesas Flash Programmer*"},
|
||||||
|
QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
|
||||||
if (!subDirs.empty())
|
if (!subDirs.empty())
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
|
@@ -179,10 +179,11 @@ bool DesktopDevice::handlesFile(const FilePath &filePath) const
|
|||||||
void DesktopDevice::iterateDirectory(const FilePath &filePath,
|
void DesktopDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const
|
||||||
{
|
{
|
||||||
QTC_CHECK(!filePath.needsDevice());
|
QTC_CHECK(!filePath.needsDevice());
|
||||||
filePath.iterateDirectory(callBack, nameFilters, filters);
|
filePath.iterateDirectory(callBack, nameFilters, filters, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 DesktopDevice::fileSize(const FilePath &filePath) const
|
qint64 DesktopDevice::fileSize(const FilePath &filePath) const
|
||||||
|
@@ -76,7 +76,8 @@ public:
|
|||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const override;
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const override;
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
||||||
|
@@ -525,10 +525,11 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
|
|||||||
deviceHooks.iterateDirectory = [](const FilePath &filePath,
|
deviceHooks.iterateDirectory = [](const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) {
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) {
|
||||||
auto device = DeviceManager::deviceForPath(filePath);
|
auto device = DeviceManager::deviceForPath(filePath);
|
||||||
QTC_ASSERT(device, return);
|
QTC_ASSERT(device, return);
|
||||||
device->iterateDirectory(filePath, callBack, nameFilters, filters);
|
device->iterateDirectory(filePath, callBack, nameFilters, filters, flags);
|
||||||
};
|
};
|
||||||
|
|
||||||
deviceHooks.fileContents = [](const FilePath &filePath, qint64 maxSize, qint64 offset) {
|
deviceHooks.fileContents = [](const FilePath &filePath, qint64 maxSize, qint64 offset) {
|
||||||
|
@@ -364,12 +364,14 @@ FilePath IDevice::symLinkTarget(const FilePath &filePath) const
|
|||||||
void IDevice::iterateDirectory(const FilePath &filePath,
|
void IDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(filePath);
|
Q_UNUSED(filePath);
|
||||||
Q_UNUSED(callBack);
|
Q_UNUSED(callBack);
|
||||||
Q_UNUSED(nameFilters);
|
Q_UNUSED(nameFilters);
|
||||||
Q_UNUSED(filters);
|
Q_UNUSED(filters);
|
||||||
|
Q_UNUSED(flags);
|
||||||
QTC_CHECK(false);
|
QTC_CHECK(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -262,7 +262,8 @@ public:
|
|||||||
virtual void iterateDirectory(const Utils::FilePath &filePath,
|
virtual void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const;
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const;
|
||||||
virtual QByteArray fileContents(const Utils::FilePath &filePath,
|
virtual QByteArray fileContents(const Utils::FilePath &filePath,
|
||||||
qint64 limit,
|
qint64 limit,
|
||||||
qint64 offset) const;
|
qint64 offset) const;
|
||||||
|
@@ -425,7 +425,8 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
|
|||||||
|
|
||||||
const QDir::Filters filters = QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot;
|
const QDir::Filters filters = QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot;
|
||||||
const QDir::SortFlags sortflags = QDir::Name|QDir::IgnoreCase;
|
const QDir::SortFlags sortflags = QDir::Name|QDir::IgnoreCase;
|
||||||
FilePaths dirs = path.dirEntries({}, filters, sortflags);
|
const QDirIterator::IteratorFlag iteratorFlags = QDirIterator::NoIteratorFlags;
|
||||||
|
FilePaths dirs = path.dirEntries({}, filters, iteratorFlags, sortflags);
|
||||||
|
|
||||||
while (!dirs.isEmpty()) {
|
while (!dirs.isEmpty()) {
|
||||||
const FilePath currentDir = dirs.takeFirst();
|
const FilePath currentDir = dirs.takeFirst();
|
||||||
@@ -482,7 +483,7 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
|
|||||||
|
|
||||||
result << factory;
|
result << factory;
|
||||||
} else {
|
} else {
|
||||||
FilePaths subDirs = currentDir.dirEntries({}, filters, sortflags);
|
FilePaths subDirs = currentDir.dirEntries({}, filters, iteratorFlags, sortflags);
|
||||||
if (!subDirs.isEmpty()) {
|
if (!subDirs.isEmpty()) {
|
||||||
// There is no QList::prepend(QList)...
|
// There is no QList::prepend(QList)...
|
||||||
dirs.swap(subDirs);
|
dirs.swap(subDirs);
|
||||||
|
@@ -791,8 +791,8 @@ QStringList SessionManager::sessions()
|
|||||||
{
|
{
|
||||||
if (d->m_sessions.isEmpty()) {
|
if (d->m_sessions.isEmpty()) {
|
||||||
// We are not initialized yet, so do that now
|
// We are not initialized yet, so do that now
|
||||||
const FilePaths sessionFiles =
|
const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({"*.qws"},
|
||||||
ICore::userResourcePath().dirEntries({"*.qws"}, QDir::NoFilter, QDir::Time);
|
QDir::NoFilter, QDirIterator::NoIteratorFlags, QDir::Time);
|
||||||
for (const FilePath &file : sessionFiles) {
|
for (const FilePath &file : sessionFiles) {
|
||||||
const QString &name = file.completeBaseName();
|
const QString &name = file.completeBaseName();
|
||||||
d->m_sessionDateTimes.insert(name, file.lastModified());
|
d->m_sessionDateTimes.insert(name, file.lastModified());
|
||||||
|
@@ -677,7 +677,8 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &entries,
|
const QStringList &entries,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters)
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags)
|
||||||
{
|
{
|
||||||
const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
|
const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
|
||||||
QRegularExpression re;
|
QRegularExpression re;
|
||||||
@@ -697,6 +698,7 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
|
|
||||||
// FIXME: Handle filters. For now bark on unsupported options.
|
// FIXME: Handle filters. For now bark on unsupported options.
|
||||||
QTC_CHECK(filters == QDir::NoFilter);
|
QTC_CHECK(filters == QDir::NoFilter);
|
||||||
|
QTC_CHECK(flags == QDirIterator::NoIteratorFlags);
|
||||||
|
|
||||||
for (const QString &entry : entries) {
|
for (const QString &entry : entries) {
|
||||||
if (!nameMatches(entry))
|
if (!nameMatches(entry))
|
||||||
@@ -709,13 +711,14 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
void LinuxDevice::iterateDirectory(const FilePath &filePath,
|
void LinuxDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(handlesFile(filePath), return);
|
QTC_ASSERT(handlesFile(filePath), return);
|
||||||
// if we do not have find - use ls as fallback
|
// if we do not have find - use ls as fallback
|
||||||
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
||||||
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
||||||
filterEntriesHelper(filePath, callBack, entries, nameFilters, filters);
|
filterEntriesHelper(filePath, callBack, entries, nameFilters, filters, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray LinuxDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
QByteArray LinuxDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
||||||
|
@@ -79,7 +79,8 @@ public:
|
|||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
QDir::Filters filters) const override;
|
QDir::Filters filters,
|
||||||
|
QDirIterator::IteratorFlags flags) const override;
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
||||||
|
Reference in New Issue
Block a user