QtBase  v6.3.1
qfileinfo.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2020 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #include "qplatformdefs.h"
41 #include "qfileinfo.h"
42 #include "qglobal.h"
43 #include "qdir.h"
44 #include "qfileinfo_p.h"
45 #include "qdebug.h"
46 
48 
50 
51 QString QFileInfoPrivate::getFileName(QAbstractFileEngine::FileName name) const
52 {
53  if (cache_enabled && !fileNames[(int)name].isNull())
54  return fileNames[(int)name];
55 
56  QString ret;
57  if (fileEngine == nullptr) { // local file; use the QFileSystemEngine directly
58  switch (name) {
62  if (cache_enabled) { // be smart and store both
65  }
67  ret = entry.filePath();
68  else
69  ret = entry.path();
70  break;
71  }
73  ret = QFileSystemEngine::getLinkTarget(fileEntry, metaData).filePath();
74  break;
76  ret = QFileSystemEngine::getJunctionTarget(fileEntry, metaData).filePath();
77  break;
80  break;
84  if (cache_enabled) { // be smart and store both
87  }
89  ret = entry.filePath();
90  else
91  ret = entry.path();
92  break;
93  }
94  default: break;
95  }
96  } else {
97  ret = fileEngine->fileName(name);
98  }
99  if (ret.isNull())
100  ret = QLatin1String("");
101  if (cache_enabled)
102  fileNames[(int)name] = ret;
103  return ret;
104 }
105 
107 {
108  if (cache_enabled && !fileOwners[(int)own].isNull())
109  return fileOwners[(int)own];
110  QString ret;
111  if (fileEngine == nullptr) {
112  switch (own) {
115  break;
118  break;
119  }
120  } else {
121  ret = fileEngine->owner(own);
122  }
123  if (ret.isNull())
124  ret = QLatin1String("");
125  if (cache_enabled)
126  fileOwners[(int)own] = ret;
127  return ret;
128 }
129 
130 uint QFileInfoPrivate::getFileFlags(QAbstractFileEngine::FileFlags request) const
131 {
132  Q_ASSERT(fileEngine); // should never be called when using the native FS
133  // We split the testing into tests for for LinkType, BundleType, PermsMask
134  // and the rest.
135  // Tests for file permissions on Windows can be slow, especially on network
136  // paths and NTFS drives.
137  // In order to determine if a file is a symlink or not, we have to lstat().
138  // If we're not interested in that information, we might as well avoid one
139  // extra syscall. Bundle detecton on Mac can be slow, especially on network
140  // paths, so we separate out that as well.
141 
142  QAbstractFileEngine::FileFlags req;
143  uint cachedFlags = 0;
144 
149  req &= (~QAbstractFileEngine::LinkType);
150  req &= (~QAbstractFileEngine::BundleType);
151 
153  }
154 
159  }
160  }
161 
166  }
167  }
168  }
169 
171  if (!getCachedFlag(CachedPerms)) {
174  }
175  }
176 
177  if (req) {
178  if (cache_enabled)
179  req &= (~QAbstractFileEngine::Refresh);
180  else
182 
183  QAbstractFileEngine::FileFlags flags = fileEngine->fileFlags(req);
184  fileFlags |= uint(flags.toInt());
186  }
187 
188  return fileFlags & request.toInt();
189 }
190 
192 {
193  Q_ASSERT(fileEngine); // should never be called when using the native FS
194  if (!cache_enabled)
195  clearFlags();
196 
197  uint cf = 0;
198  switch (request) {
200  cf = CachedATime;
201  break;
203  cf = CachedBTime;
204  break;
206  cf = CachedMCTime;
207  break;
209  cf = CachedMTime;
210  break;
211  }
212 
213  if (!getCachedFlag(cf)) {
214  fileTimes[request] = fileEngine->fileTime(request);
215  setCachedFlag(cf);
216  }
217  return fileTimes[request];
218 }
219 
220 //************* QFileInfo
221 
337 {
338 }
339 
348 {
349 }
350 
358 {
359 }
360 
371 {
372 }
373 
387  : d_ptr(new QFileInfoPrivate(dir.filePath(file)))
388 {
389 }
390 
395  : d_ptr(fileinfo.d_ptr)
396 {
397 
398 }
399 
405 {
406 }
407 
433 bool QFileInfo::operator==(const QFileInfo &fileinfo) const
434 {
435  Q_D(const QFileInfo);
436  // ### Qt 5: understand long and short file names on Windows
437  // ### (GetFullPathName()).
438  if (fileinfo.d_ptr == d_ptr)
439  return true;
440  if (d->isDefaultConstructed || fileinfo.d_ptr->isDefaultConstructed)
441  return false;
442 
443  // Assume files are the same if path is the same
444  if (d->fileEntry.filePath() == fileinfo.d_ptr->fileEntry.filePath())
445  return true;
446 
447  Qt::CaseSensitivity sensitive;
448  if (d->fileEngine == nullptr || fileinfo.d_ptr->fileEngine == nullptr) {
449  if (d->fileEngine != fileinfo.d_ptr->fileEngine) // one is native, the other is a custom file-engine
450  return false;
451 
453  } else {
454  if (d->fileEngine->caseSensitive() != fileinfo.d_ptr->fileEngine->caseSensitive())
455  return false;
456  sensitive = d->fileEngine->caseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive;
457  }
458 
459  // Fallback to expensive canonical path computation
460  return canonicalFilePath().compare(fileinfo.canonicalFilePath(), sensitive) == 0;
461 }
462 
467 {
468  d_ptr = fileinfo.d_ptr;
469  return *this;
470 }
471 
496 {
498  *this = QFileInfo(file);
500 }
501 
514 {
515  setFile(file.fileName());
516 }
517 
529 void QFileInfo::setFile(const QDir &dir, const QString &file)
530 {
532 }
533 
557 {
558  Q_D(const QFileInfo);
559  if (d->isDefaultConstructed)
560  return QLatin1String("");
561  return d->getFileName(QAbstractFileEngine::AbsoluteName);
562 }
563 
574 {
575  Q_D(const QFileInfo);
576  if (d->isDefaultConstructed)
577  return QLatin1String("");
578  return d->getFileName(QAbstractFileEngine::CanonicalName);
579 }
580 
581 
600 {
601  Q_D(const QFileInfo);
602 
603  if (d->isDefaultConstructed) {
604  return QLatin1String("");
605  }
606  return d->getFileName(QAbstractFileEngine::AbsolutePathName);
607 }
608 
618 {
619  Q_D(const QFileInfo);
620  if (d->isDefaultConstructed)
621  return QLatin1String("");
622  return d->getFileName(QAbstractFileEngine::CanonicalPathName);
623 }
624 
635 {
636  Q_D(const QFileInfo);
637  if (d->isDefaultConstructed)
638  return QLatin1String("");
639  return d->fileEntry.path();
640 }
641 
665 {
666  Q_D(const QFileInfo);
667  if (d->isDefaultConstructed)
668  return true;
669  if (d->fileEngine == nullptr)
670  return d->fileEntry.isRelative();
671  return d->fileEngine->isRelativePath();
672 }
673 
682 {
685  return false;
686 
688  return true;
689 }
690 
697 bool QFileInfo::exists() const
698 {
699  Q_D(const QFileInfo);
700  if (d->isDefaultConstructed)
701  return false;
702  if (d->fileEngine == nullptr) {
703  if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
705  return d->metaData.exists();
706  }
707  return d->getFileFlags(QAbstractFileEngine::ExistsFlag);
708 }
709 
722 {
723  if (file.isEmpty())
724  return false;
727  std::unique_ptr<QAbstractFileEngine> engine
729  // Expensive fallback to non-QFileSystemEngine implementation
730  if (engine)
731  return QFileInfo(new QFileInfoPrivate(entry, data, std::move(engine))).exists();
732 
734  return data.exists();
735 }
736 
742 {
743  Q_D(QFileInfo);
744  d->clear();
745 }
746 
754 {
755  Q_D(const QFileInfo);
756  if (d->isDefaultConstructed)
757  return QLatin1String("");
758  return d->fileEntry.filePath();
759 }
760 
773 {
774  Q_D(const QFileInfo);
775  if (d->isDefaultConstructed)
776  return QLatin1String("");
777  return d->fileEntry.fileName();
778 }
779 
793 {
794  Q_D(const QFileInfo);
795  if (d->isDefaultConstructed)
796  return QLatin1String("");
797  return d->getFileName(QAbstractFileEngine::BundleName);
798 }
799 
817 {
818  Q_D(const QFileInfo);
819  if (d->isDefaultConstructed)
820  return QLatin1String("");
821  return d->fileEntry.baseName();
822 }
823 
836 {
837  Q_D(const QFileInfo);
838  if (d->isDefaultConstructed)
839  return QLatin1String("");
840  return d->fileEntry.completeBaseName();
841 }
842 
855 {
856  Q_D(const QFileInfo);
857  if (d->isDefaultConstructed)
858  return QLatin1String("");
859  return d->fileEntry.completeSuffix();
860 }
861 
878 {
879  Q_D(const QFileInfo);
880  if (d->isDefaultConstructed)
881  return QLatin1String("");
882  return d->fileEntry.suffix();
883 }
884 
885 
905 {
906  Q_D(const QFileInfo);
907  return QDir(d->fileEntry.path());
908 }
909 
916 {
917  return QDir(absolutePath());
918 }
919 
932 {
933  Q_D(const QFileInfo);
934  return d->checkAttribute<bool>(
936  [d]() { return (d->metaData.permissions() & QFile::ReadUser) != 0; },
937  [d]() { return d->getFileFlags(QAbstractFileEngine::ReadUserPerm); });
938 }
939 
952 {
953  Q_D(const QFileInfo);
954  return d->checkAttribute<bool>(
956  [d]() { return (d->metaData.permissions() & QFile::WriteUser) != 0; },
957  [d]() { return d->getFileFlags(QAbstractFileEngine::WriteUserPerm); });
958 }
959 
969 {
970  Q_D(const QFileInfo);
971  return d->checkAttribute<bool>(
973  [d]() { return (d->metaData.permissions() & QFile::ExeUser) != 0; },
974  [d]() { return d->getFileFlags(QAbstractFileEngine::ExeUserPerm); });
975 }
976 
989 {
990  Q_D(const QFileInfo);
991  return d->checkAttribute<bool>(
993  [d]() { return d->metaData.isHidden(); },
994  [d]() { return d->getFileFlags(QAbstractFileEngine::HiddenFlag); });
995 }
996 
1011 {
1012  Q_D(const QFileInfo);
1013  if (d->isDefaultConstructed)
1014  return false;
1015  if (d->fileEngine == nullptr)
1016  return true;
1017  return d->getFileFlags(QAbstractFileEngine::LocalDiskFlag);
1018 }
1019 
1030 bool QFileInfo::isFile() const
1031 {
1032  Q_D(const QFileInfo);
1033  return d->checkAttribute<bool>(
1035  [d]() { return d->metaData.isFile(); },
1036  [d]() { return d->getFileFlags(QAbstractFileEngine::FileType); });
1037 }
1038 
1048 bool QFileInfo::isDir() const
1049 {
1050  Q_D(const QFileInfo);
1051  return d->checkAttribute<bool>(
1053  [d]() { return d->metaData.isDirectory(); },
1054  [d]() { return d->getFileFlags(QAbstractFileEngine::DirectoryType); });
1055 }
1056 
1057 
1069 {
1070  Q_D(const QFileInfo);
1071  return d->checkAttribute<bool>(
1073  [d]() { return d->metaData.isBundle(); },
1074  [d]() { return d->getFileFlags(QAbstractFileEngine::BundleType); });
1075 }
1076 
1101 {
1102  Q_D(const QFileInfo);
1103  return d->checkAttribute<bool>(
1105  [d]() { return d->metaData.isLegacyLink(); },
1106  [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1107 }
1108 
1131 {
1132  Q_D(const QFileInfo);
1133  return d->checkAttribute<bool>(
1135  [d]() { return d->metaData.isLink(); },
1136  [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1137 }
1138 
1157 {
1158  Q_D(const QFileInfo);
1159  return d->checkAttribute<bool>(
1161  [d]() { return d->metaData.isLnkFile(); },
1162  [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1163 }
1164 
1165 
1178 {
1179  Q_D(const QFileInfo);
1180  return d->checkAttribute<bool>(
1182  [d]() { return d->metaData.isJunction(); },
1183  [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1184 }
1185 
1191 bool QFileInfo::isRoot() const
1192 {
1193  Q_D(const QFileInfo);
1194  if (d->isDefaultConstructed)
1195  return false;
1196  if (d->fileEngine == nullptr) {
1197  if (d->fileEntry.isRoot()) {
1198 #if defined(Q_OS_WIN)
1199  //the path is a drive root, but the drive may not exist
1200  //for backward compatibility, return true only if the drive exists
1201  if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
1203  return d->metaData.exists();
1204 #else
1205  return true;
1206 #endif
1207  }
1208  return false;
1209  }
1210  return d->getFileFlags(QAbstractFileEngine::RootFlag);
1211 }
1212 
1227 {
1228  Q_D(const QFileInfo);
1229  if (d->isDefaultConstructed)
1230  return QLatin1String("");
1231  return d->getFileName(QAbstractFileEngine::AbsoluteLinkTarget);
1232 }
1233 
1249 {
1250  Q_D(const QFileInfo);
1251  if (d->isDefaultConstructed)
1252  return QLatin1String("");
1253  return d->getFileName(QAbstractFileEngine::JunctionName);
1254 }
1255 
1271 {
1272  Q_D(const QFileInfo);
1273  if (d->isDefaultConstructed)
1274  return QLatin1String("");
1275  return d->getFileOwner(QAbstractFileEngine::OwnerUser);
1276 }
1277 
1290 {
1291  Q_D(const QFileInfo);
1292  return d->checkAttribute(uint(-2),
1294  [d]() { return d->metaData.userId(); },
1295  [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerUser); });
1296 }
1297 
1312 {
1313  Q_D(const QFileInfo);
1314  if (d->isDefaultConstructed)
1315  return QLatin1String("");
1316  return d->getFileOwner(QAbstractFileEngine::OwnerGroup);
1317 }
1318 
1331 {
1332  Q_D(const QFileInfo);
1333  return d->checkAttribute(uint(-2),
1335  [d]() { return d->metaData.groupId(); },
1336  [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerGroup); });
1337 }
1338 
1358 bool QFileInfo::permission(QFile::Permissions permissions) const
1359 {
1360  Q_D(const QFileInfo);
1361  // the QFileSystemMetaData::MetaDataFlag and QFile::Permissions overlap, so just cast.
1362  auto fseFlags = QFileSystemMetaData::MetaDataFlags::fromInt(permissions.toInt());
1363  auto feFlags = QAbstractFileEngine::FileFlags::fromInt(permissions.toInt());
1364  return d->checkAttribute<bool>(
1365  fseFlags,
1366  [=]() { return (d->metaData.permissions() & permissions) == permissions; },
1367  [=]() {
1368  return d->getFileFlags(feFlags) == uint(permissions.toInt());
1369  });
1370 }
1371 
1382 QFile::Permissions QFileInfo::permissions() const
1383 {
1384  Q_D(const QFileInfo);
1385  return d->checkAttribute<QFile::Permissions>(
1387  [d]() { return d->metaData.permissions(); },
1388  [d]() {
1389  return QFile::Permissions(d->getFileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask);
1390  });
1391 }
1392 
1393 
1404 {
1405  Q_D(const QFileInfo);
1406  return d->checkAttribute<qint64>(
1408  [d]() { return d->metaData.size(); },
1409  [d]() {
1410  if (!d->getCachedFlag(QFileInfoPrivate::CachedSize)) {
1411  d->setCachedFlag(QFileInfoPrivate::CachedSize);
1412  d->fileSize = d->fileEngine->size();
1413  }
1414  return d->fileSize;
1415  });
1416 }
1417 
1483 {
1484  static_assert(int(QFile::FileAccessTime) == int(QAbstractFileEngine::AccessTime));
1485  static_assert(int(QFile::FileBirthTime) == int(QAbstractFileEngine::BirthTime));
1488 
1489  Q_D(const QFileInfo);
1490  auto fetime = QAbstractFileEngine::FileTime(time);
1492  switch (time) {
1493  case QFile::FileAccessTime:
1495  break;
1496  case QFile::FileBirthTime:
1498  break;
1501  break;
1504  break;
1505  }
1506 
1507  return d->checkAttribute<QDateTime>(
1508  flag,
1509  [=]() { return d->metaData.fileTime(fetime).toLocalTime(); },
1510  [=]() { return d->getFileTime(fetime).toLocalTime(); });
1511 }
1512 
1516 QFileInfoPrivate* QFileInfo::d_func()
1517 {
1518  return d_ptr.data();
1519 }
1520 
1527 {
1528  Q_D(const QFileInfo);
1529  return d->cache_enabled;
1530 }
1531 
1545 {
1546  Q_D(QFileInfo);
1547  d->cache_enabled = enable;
1548 }
1549 
1561 {
1562  Q_D(QFileInfo);
1564 }
1565 
1573 #ifndef QT_NO_DEBUG_STREAM
1575 {
1576  QDebugStateSaver saver(dbg);
1577  dbg.nospace();
1578  dbg.noquote();
1579  dbg << "QFileInfo(" << QDir::toNativeSeparators(fi.filePath()) << ')';
1580  return dbg;
1581 }
1582 #endif
1583 
operator<<(QDataStream &ds, qfloat16 f)
Definition: qfloat16.cpp:327
The QDateTime class provides date and time functions.
Definition: qdatetime.h:238
The QDebug class provides an output stream for debugging information.
Definition: qdebug.h:65
QDebug & noquote()
Definition: qdebug.h:124
QDebug & nospace()
Definition: qdebug.h:113
Convenience class for custom QDebug operators.
Definition: qdebug.h:176
The QDir class provides access to directory structures and their contents.
Definition: qdir.h:55
QString filePath(const QString &fileName) const
Definition: qdir.cpp:765
static QString toNativeSeparators(const QString &pathName)
Definition: qdir.cpp:916
The QFileDevice class provides an interface for reading from and writing to open files.
Definition: qfiledevice.h:52
@ FileMetadataChangeTime
Definition: qfiledevice.h:80
@ FileModificationTime
Definition: qfiledevice.h:81
QString fileName() const override
Definition: qfile.cpp:302
The QFileInfo class provides system-independent file information.
Definition: qfileinfo.h:57
void refresh()
Definition: qfileinfo.cpp:741
bool isSymLink() const
Definition: qfileinfo.cpp:1100
bool isNativePath() const
Definition: qfileinfo.cpp:1010
QString baseName() const
Definition: qfileinfo.cpp:816
bool isBundle() const
Definition: qfileinfo.cpp:1068
bool isSymbolicLink() const
Definition: qfileinfo.cpp:1130
QString completeSuffix() const
Definition: qfileinfo.cpp:854
QString symLinkTarget() const
Definition: qfileinfo.cpp:1226
QString suffix() const
Definition: qfileinfo.cpp:877
bool makeAbsolute()
Definition: qfileinfo.cpp:681
QFileInfo & operator=(const QFileInfo &fileinfo)
Definition: qfileinfo.cpp:466
uint groupId() const
Definition: qfileinfo.cpp:1330
bool isRoot() const
Definition: qfileinfo.cpp:1191
void stat()
Definition: qfileinfo.cpp:1560
void setCaching(bool on)
Definition: qfileinfo.cpp:1544
QString fileName() const
Definition: qfileinfo.cpp:772
QString bundleName() const
Definition: qfileinfo.cpp:792
bool isExecutable() const
Definition: qfileinfo.cpp:968
void setFile(const QString &file)
Definition: qfileinfo.cpp:495
QString absoluteFilePath() const
Definition: qfileinfo.cpp:556
bool isFile() const
Definition: qfileinfo.cpp:1030
QString canonicalPath() const
Definition: qfileinfo.cpp:617
QString completeBaseName() const
Definition: qfileinfo.cpp:835
QDateTime fileTime(QFile::FileTime time) const
Definition: qfileinfo.cpp:1482
bool isDir() const
Definition: qfileinfo.cpp:1048
bool operator==(const QFileInfo &fileinfo) const
Definition: qfileinfo.cpp:433
QString owner() const
Definition: qfileinfo.cpp:1270
QSharedDataPointer< QFileInfoPrivate > d_ptr
Definition: qfileinfo.h:195
QString absolutePath() const
Definition: qfileinfo.cpp:599
bool isWritable() const
Definition: qfileinfo.cpp:951
uint ownerId() const
Definition: qfileinfo.cpp:1289
qint64 size() const
Definition: qfileinfo.cpp:1403
QString junctionTarget() const
Definition: qfileinfo.cpp:1248
QString canonicalFilePath() const
Definition: qfileinfo.cpp:573
QDir absoluteDir() const
Definition: qfileinfo.cpp:915
QDir dir() const
Definition: qfileinfo.cpp:904
bool isHidden() const
Definition: qfileinfo.cpp:988
bool caching() const
Definition: qfileinfo.cpp:1526
bool isRelative() const
Definition: qfileinfo.cpp:664
bool permission(QFile::Permissions permissions) const
Definition: qfileinfo.cpp:1358
QString path() const
Definition: qfileinfo.cpp:634
bool isShortcut() const
Definition: qfileinfo.cpp:1156
bool isJunction() const
Definition: qfileinfo.cpp:1177
QString filePath() const
Definition: qfileinfo.cpp:753
bool exists() const
Definition: qfileinfo.cpp:697
bool isReadable() const
Definition: qfileinfo.cpp:931
QFile::Permissions permissions() const
Definition: qfileinfo.cpp:1382
QString group() const
Definition: qfileinfo.cpp:1311
bool const isDefaultConstructed
Definition: qfileinfo_p.h:175
QFileSystemMetaData metaData
Definition: qfileinfo_p.h:166
std::unique_ptr< QAbstractFileEngine > const fileEngine
Definition: qfileinfo_p.h:168
QDateTime fileTimes[4]
Definition: qfileinfo_p.h:172
uint getFileFlags(QAbstractFileEngine::FileFlags) const
Definition: qfileinfo.cpp:130
void clearFlags() const
Definition: qfileinfo_p.h:145
void setCachedFlag(uint c) const
Definition: qfileinfo_p.h:181
QString getFileOwner(QAbstractFileEngine::FileOwner own) const
Definition: qfileinfo.cpp:106
QString fileOwners[2]
Definition: qfileinfo_p.h:171
bool getCachedFlag(uint c) const
Definition: qfileinfo_p.h:179
QDateTime & getFileTime(QAbstractFileEngine::FileTime) const
Definition: qfileinfo.cpp:191
QFileSystemEntry fileEntry
Definition: qfileinfo_p.h:165
static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data)
static QFileSystemEntry canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static QAbstractFileEngine * resolveEntryAndCreateLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data)
static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what)
static QString bundleName(const QFileSystemEntry &)
static QFileSystemEntry getJunctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data)
static QFileSystemEntry absoluteName(const QFileSystemEntry &entry)
static QString resolveUserName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static QString resolveGroupName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static bool isCaseSensitive()
bool isRelative() const
QString filePath() const
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
Definition: qstring.h:84
const T * constData() const noexcept
Definition: qshareddata.h:87
The QString class provides a Unicode character string.
Definition: qstring.h:388
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.cpp:6263
CaseSensitivity
Definition: qnamespace.h:1282
@ CaseInsensitive
Definition: qnamespace.h:1283
@ CaseSensitive
Definition: qnamespace.h:1284
unsigned int uint
Definition: qglobal.h:334
long long qint64
Definition: qglobal.h:298
MetaDataFlags
#define QT_IMPL_METATYPE_EXTERN(TYPE)
Definition: qmetatype.h:1287
GLbitfield flags
GLboolean enable
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint name
GLuint entry
Definition: qopenglext.h:11002
GLfloat GLfloat p
[1]
Definition: qopenglext.h:12698
#define Q_ASSERT(cond)
Definition: qrandom.cpp:84
QFile file
[0]
QFileInfo fi("c:/temp/foo")
[newstuff]
QTime time
[5]
QString dir
[11]
QStringList fileNames
[4]
QNetworkRequest request(url)