4#ifndef QFILESYSTEMMETADATA_P_H
5#define QFILESYSTEMMETADATA_P_H
18#include "qplatformdefs.h"
19#include <QtCore/qglobal.h>
20#include <QtCore/qdatetime.h>
21#include <QtCore/qtimezone.h>
22#include <QtCore/private/qabstractfileengine_p.h>
26# include <QtCore/qt_windows.h>
27# ifndef IO_REPARSE_TAG_SYMLINK
28# define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
50 OtherReadPermission = 0x00000004, OtherWritePermission = 0x00000002, OtherExecutePermission = 0x00000001,
51 GroupReadPermission = 0x00000040, GroupWritePermission = 0x00000020, GroupExecutePermission = 0x00000010,
52 UserReadPermission = 0x00000400, UserWritePermission = 0x00000200, UserExecutePermission = 0x00000100,
53 OwnerReadPermission = 0x00004000, OwnerWritePermission = 0x00002000, OwnerExecutePermission = 0x00001000,
55 OtherPermissions = OtherReadPermission | OtherWritePermission | OtherExecutePermission,
56 GroupPermissions = GroupReadPermission | GroupWritePermission | GroupExecutePermission,
57 UserPermissions = UserReadPermission | UserWritePermission | UserExecutePermission,
58 OwnerPermissions = OwnerReadPermission | OwnerWritePermission | OwnerExecutePermission,
60 ReadPermissions = OtherReadPermission | GroupReadPermission | UserReadPermission | OwnerReadPermission,
61 WritePermissions = OtherWritePermission | GroupWritePermission | UserWritePermission | OwnerWritePermission,
62 ExecutePermissions = OtherExecutePermission | GroupExecutePermission | UserExecutePermission | OwnerExecutePermission,
64 Permissions = OtherPermissions | GroupPermissions | UserPermissions | OwnerPermissions,
67 LinkType = 0x00010000,
69 DirectoryType = 0x00040000,
70#if defined(Q_OS_DARWIN)
71 BundleType = 0x00080000,
72 AliasType = 0x08000000,
78 JunctionType = 0x04000000,
79 WinLnkType = 0x08000000,
84 SequentialType = 0x00800000,
86 LegacyLinkType = LinkType | AliasType | WinLnkType,
88 Type = LinkType |
FileType | DirectoryType | BundleType | SequentialType | AliasType,
91 HiddenAttribute = 0x00100000,
92 SizeAttribute = 0x00200000,
93 ExistsAttribute = 0x00400000,
95 WasDeletedAttribute = 0x0,
97 WasDeletedAttribute = 0x40000000,
100 Attributes = HiddenAttribute | SizeAttribute | ExistsAttribute | WasDeletedAttribute,
103 AccessTime = 0x02000000,
104 BirthTime = 0x02000000,
105 MetadataChangeTime = 0x02000000,
106 ModificationTime = 0x02000000,
108 Times = AccessTime | BirthTime | MetadataChangeTime | ModificationTime,
112 GroupId = 0x20000000,
114 OwnerIds = UserId | GroupId,
136 AllMetaDataFlags = 0xFFFFFFFF
148 return flags & ~knownFlagsMask;
161 bool exists()
const {
return entryFlags.testAnyFlag(ExistsAttribute); }
163 bool isLink()
const {
return entryFlags.testAnyFlag(LinkType); }
165 bool isDirectory()
const {
return entryFlags.testAnyFlag(DirectoryType); }
166 bool isBundle()
const;
167 bool isAlias()
const;
168 bool isLegacyLink()
const {
return entryFlags.testAnyFlag(LegacyLinkType); }
169 bool isSequential()
const {
return entryFlags.testAnyFlag(SequentialType); }
170 bool isHidden()
const {
return entryFlags.testAnyFlag(HiddenAttribute); }
171 bool wasDeleted()
const {
return entryFlags.testAnyFlag(WasDeletedAttribute); }
173 bool isLnkFile()
const {
return entryFlags.testAnyFlag(WinLnkType); }
174 bool isJunction()
const {
return entryFlags.testAnyFlag(JunctionType); }
182 QFile::Permissions permissions()
const;
195 void fillFromStatxBuf(
const struct statx &statBuffer);
196 void fillFromStatBuf(
const QT_STATBUF &statBuffer);
197 void fillFromDirEnt(
const QT_DIRENT &statBuffer);
201 inline void fillFromFileAttribute(DWORD fileAttribute,
bool isDriveRoot =
false);
202 inline void fillFromFindData(WIN32_FIND_DATA &findData,
bool setLinkType =
false,
bool isDriveRoot =
false);
203 inline void fillFromFindInfo(BY_HANDLE_FILE_INFORMATION &fileInfo);
215 DWORD fileAttribute_;
217 FILETIME changeTime_;
218 FILETIME lastAccessTime_;
219 FILETIME lastWriteTime_;
224 qint64 metadataChangeTime_ = 0;
225 qint64 modificationTime_ = 0;
237#if defined(Q_OS_DARWIN)
245#if defined(Q_OS_UNIX) || defined (Q_OS_WIN)
266#if defined(Q_OS_UNIX)
275 return metadataChangeTime_
281 return modificationTime_
315inline void QFileSystemMetaData::fillFromFileAttribute(DWORD fileAttribute,
bool isDriveRoot)
317 fileAttribute_ = fileAttribute;
319 if (!isDriveRoot && (fileAttribute_ & FILE_ATTRIBUTE_HIDDEN))
326inline void QFileSystemMetaData::fillFromFindData(WIN32_FIND_DATA &findData,
bool setLinkType,
bool isDriveRoot)
328 fillFromFileAttribute(findData.dwFileAttributes, isDriveRoot);
329 birthTime_ = findData.ftCreationTime;
330 lastAccessTime_ = findData.ftLastAccessTime;
331 changeTime_ = lastWriteTime_ = findData.ftLastWriteTime;
332 if (fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY) {
335 size_ = findData.nFileSizeHigh;
337 size_ += findData.nFileSizeLow;
342 entryFlags &= ~LinkType;
343 if (fileAttribute_ & FILE_ATTRIBUTE_REPARSE_POINT) {
346#if defined(IO_REPARSE_TAG_MOUNT_POINT)
347 }
else if ((fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY)
348 && (findData.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT)) {
356inline void QFileSystemMetaData::fillFromFindInfo(BY_HANDLE_FILE_INFORMATION &fileInfo)
358 fillFromFileAttribute(fileInfo.dwFileAttributes);
359 birthTime_ = fileInfo.ftCreationTime;
360 lastAccessTime_ = fileInfo.ftLastAccessTime;
361 changeTime_ = lastWriteTime_ = fileInfo.ftLastWriteTime;
362 if (fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY) {
365 size_ = fileInfo.nFileSizeHigh;
367 size_ += fileInfo.nFileSizeLow;
FileOwner
\value OwnerUser The user who owns the file.
FileTime
These are used by the fileTime() function.
\inmodule QtCore\reentrant
static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
Combined button and popup list for selecting options.
#define IO_REPARSE_TAG_SYMLINK
#define Q_DECLARE_FLAGS(Flags, Enum)
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
#define Q_AUTOTEST_EXPORT
static int toInt(const QChar &qc, int R)