Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdirentryinfo_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 Ahmad Samir <a.samirh78@gmail.com>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QDIRENTRYINFO_P_H
6#define QDIRENTRYINFO_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/private/qfileinfo_p.h>
20#include <QtCore/private/qfilesystementry_p.h>
21#include <QtCore/private/qfilesystemmetadata_p.h>
22
24
26{
27 const QFileSystemMetaData &ensureFilled(QFileSystemMetaData::MetaDataFlags what)
28 {
29 if (!metaData.hasFlags(what))
30 QFileSystemEngine::fillMetaData(entry, metaData, what);
31 return metaData;
32 }
33
34public:
35 QDirEntryInfo() = default;
36 explicit QDirEntryInfo(QFileInfo &&info)
38 {
39 }
40 explicit QDirEntryInfo(QFileSystemEntry &&e, QFileSystemMetaData &&md)
41 : entry(std::move(e)),
43 {
44 }
45
46 const QFileInfo &fileInfo()
47 {
48 if (!fileInfoOpt) {
49 fileInfoOpt.emplace(new QFileInfoPrivate(entry, metaData));
50 metaData.clear();
51 }
52 return *fileInfoOpt;
53 }
54
56 { return fileInfoOpt ? fileInfoOpt->fileName() : entry.fileName(); }
58 { return fileInfoOpt ? fileInfoOpt->baseName() : entry.baseName(); }
60 { return fileInfoOpt ? fileInfoOpt->completeBaseName() : entry.completeBaseName(); }
62 { return fileInfoOpt ? fileInfoOpt->suffix() : entry.suffix(); }
64 { return fileInfoOpt ? fileInfoOpt->completeSuffix() : entry.completeSuffix(); }
66 { return fileInfoOpt ? fileInfoOpt->filePath() : entry.filePath(); }
67
68 QString bundleName() { return fileInfo().bundleName(); }
69
71 {
72 // QFileInfo caches these strings
73 return fileInfo().canonicalFilePath();
74 }
75
77 // QFileInfo caches these strings
78 return fileInfo().absoluteFilePath();
79 }
80
82 // QFileInfo caches these strings
83 return fileInfo().absolutePath();
84 }
85
86
87 bool isDir() {
88 if (fileInfoOpt)
89 return fileInfoOpt->isDir();
90
91 return ensureFilled(QFileSystemMetaData::DirectoryType).isDirectory();
92 }
93
94 bool isFile() {
95 if (fileInfoOpt)
96 return fileInfoOpt->isFile();
97
98 return ensureFilled(QFileSystemMetaData::FileType).isFile();
99 }
100
101 bool isSymLink() {
102 if (fileInfoOpt)
103 return fileInfoOpt->isSymLink();
104
105 return ensureFilled(QFileSystemMetaData::LegacyLinkType).isLegacyLink();
106 }
107
109 if (fileInfoOpt)
110 return fileInfoOpt->isSymbolicLink();
111
112 return ensureFilled(QFileSystemMetaData::LinkType).isLink();
113 }
114
115 bool exists() {
116 if (fileInfoOpt)
117 return fileInfoOpt->exists();
118
119 return ensureFilled(QFileSystemMetaData::ExistsAttribute).exists();
120 }
121
122 bool isHidden() {
123 if (fileInfoOpt)
124 return fileInfoOpt->isHidden();
125
126 return ensureFilled(QFileSystemMetaData::HiddenAttribute).isHidden();
127 }
128
129 bool isReadable() {
130 if (fileInfoOpt)
131 return fileInfoOpt->isReadable();
132
133 return ensureFilled(QFileSystemMetaData::UserReadPermission).isReadable();
134 }
135
136 bool isWritable() {
137 if (fileInfoOpt)
138 return fileInfoOpt->isWritable();
139
140 return ensureFilled(QFileSystemMetaData::UserWritePermission).isWritable();
141 }
142
144 if (fileInfoOpt)
145 return fileInfoOpt->isExecutable();
146
147 return ensureFilled(QFileSystemMetaData::UserExecutePermission).isExecutable();
148 }
149
150 qint64 size() { return fileInfo().size(); }
151
152 QDateTime fileTime(QFile::FileTime type, const QTimeZone &tz)
153 {
154 return fileInfo().fileTime(type, tz);
155 }
156
157private:
158 friend class QDirListingPrivate;
159 friend class QDirListing;
160 friend class QFileSystemIterator;
162
163 QFileSystemEntry entry;
164 QFileSystemMetaData metaData;
165 std::optional<QFileInfo> fileInfoOpt = std::nullopt;
166};
167
168QT_END_NAMESPACE
169
170#endif // QDIRENTRYINFO_P_H
QString suffix() const
QString baseName()
QDirEntryInfo(QFileSystemEntry &&e, QFileSystemMetaData &&md)
QString filePath()
const QFileInfo & fileInfo()
QString absoluteFilePath()
QString canonicalFilePath()
QDateTime fileTime(QFile::FileTime type, const QTimeZone &tz)
QString completeSuffix() const
QDirEntryInfo(QFileInfo &&info)
QDirEntryInfo()=default
QString fileName()
QString completeBaseName() const
QString bundleName()
QString absolutePath()
QDirIteratorPrivate(const QString &path, const QStringList &nameFilters={}, QDir::Filters dirFilters=QDir::NoFilter, QDirIterator::IteratorFlags flags=QDirIterator::NoIteratorFlags)
QDir::Filters filters
void skipToNextMatch(QDirListing::const_iterator &iter)
QDirListing::const_iterator it
The QDirIterator class provides an iterator for directory entrylists.
\inmodule QtCore
Definition qdirlisting.h:72
reference operator*() const
Returns a {const QDirListing::DirEntry &} of the directory entry this iterator points to.
const_iterator & operator++()
Pre-increment operator.
Combined button and popup list for selecting options.
static QDirListing::IteratorFlags toDirListingFlags(QDir::Filters filters, QDirIterator::IteratorFlags flags)