34 template<
typename QueryNative,
typename QueryFileInfo,
typename QueryIterator>
36 QueryNative &&queryNative, QueryFileInfo &&queryFileInfo, QueryIterator &&queryIterator)
38 return std::visit(QDirEntryInfoPrivate::overloaded {
39 std::forward<QueryNative>(queryNative),
40 std::forward<QueryFileInfo>(queryFileInfo),
41 [&](
const Iterator &iterator) {
return queryIterator(iterator.iterator); }
45 template<
typename QueryNative,
typename QueryFileInfo>
46 auto query(QueryNative &&queryNative,
const QueryFileInfo &queryFileInfo)
48 return std::visit(QDirEntryInfoPrivate::overloaded {
49 std::forward<QueryNative>(queryNative),
50 [&](Iterator &iterator) {
return queryFileInfo(iterator.ensureFileInfo()); },
75 return std::visit(QDirEntryInfoPrivate::overloaded {
76 [](Iterator &iterator) ->
const QFileInfo & {
return iterator.ensureFileInfo(); },
77 [
this](
const Native &native) ->
const QFileInfo & {
78 content = QFileInfo(
new QFileInfoPrivate(native.entry, native.metaData));
79 return std::get<QFileInfo>(content);
81 [](
const QFileInfo &fileInfo) ->
const QFileInfo & {
return fileInfo; }
88 [](
const Native &native) {
return native.entry.fileName(); },
89 [](
const QFileInfo &info) {
return info.fileName(); },
90 [](
const QAbstractFileEngineIterator *it) {
return it->currentFileName(); });
96 [](
const Native &native) {
return native.entry.baseName(); },
97 [](
const QFileInfo &info) {
return info.baseName(); });
103 [](
const Native &native) {
return native.entry.completeBaseName(); },
104 [](
const QFileInfo &info) {
return info.completeBaseName(); });
110 [](
const Native &native) {
return native.entry.suffix(); },
111 [](
const QFileInfo &info) {
return info.suffix(); });
117 [](
const Native &native) {
return native.entry.completeSuffix(); },
118 [](
const QFileInfo &info) {
return info.completeSuffix(); });
124 [](
const Native &native) {
return native.entry.filePath(); },
125 [](
const QFileInfo &info) {
return info.filePath(); },
126 [](
const QAbstractFileEngineIterator *it) {
return it->currentFilePath(); });
151 return native.ensureFilled(QFileSystemMetaData::DirectoryType).isDirectory();
153 [](
const QFileInfo &fileInfo) {
return fileInfo.isDir(); });
159 return native.ensureFilled(QFileSystemMetaData::FileType).isFile();
161 [](
const QFileInfo &fileInfo) {
return fileInfo.isFile(); });
167 return native.ensureFilled(QFileSystemMetaData::LegacyLinkType).isLegacyLink();
169 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymLink(); });
175 return native.ensureFilled(QFileSystemMetaData::LinkType).isLink();
177 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymbolicLink(); });
183 return native.ensureFilled(QFileSystemMetaData::ExistsAttribute).exists();
185 [](
const QFileInfo &fileInfo) {
return fileInfo.exists(); });
191 return native.ensureFilled(QFileSystemMetaData::HiddenAttribute).isHidden();
193 [](
const QFileInfo &fileInfo) {
return fileInfo.isHidden(); });
199 return native.ensureFilled(QFileSystemMetaData::UserReadPermission).isReadable();
201 [](
const QFileInfo &fileInfo) {
return fileInfo.isReadable(); });
207 return native.ensureFilled(QFileSystemMetaData::UserWritePermission).isWritable();
209 [](
const QFileInfo &fileInfo) {
return fileInfo.isWritable(); });
215 return native.ensureFilled(QFileSystemMetaData::UserExecutePermission)
218 [](
const QFileInfo &fileInfo) {
return fileInfo.isExecutable(); });
231 friend class QFileSystemIterator;
238 const QAbstractFileEngineIterator *iterator =
nullptr;
239 std::optional<QFileInfo> fileInfo;
241 const QFileInfo &ensureFileInfo()
243 if (!fileInfo.has_value())
244 fileInfo = iterator->currentFileInfo();
251 QFileSystemEntry entry;
252 QFileSystemMetaData metaData;
254 const QFileSystemMetaData &ensureFilled(QFileSystemMetaData::MetaDataFlag what)
256 if (!metaData.hasFlags(what))
257 QFileSystemEngine::fillMetaData(entry, metaData, what);
262 std::variant<Native, QFileInfo, Iterator> content;
QDirEntryInfo(QFileSystemEntry &&e, QFileSystemMetaData &&md)
const QFileInfo & fileInfo()
QString absoluteFilePath()
QString canonicalFilePath()
QDateTime fileTime(QFile::FileTime type, const QTimeZone &tz)
QDirEntryInfo(QFileInfo &&info)
QDirEntryInfo(const QAbstractFileEngineIterator *iterator)
QString completeBaseName()
overloaded(Ts...) -> overloaded< Ts... >