diff options
Diffstat (limited to 'src/corelib/io/qfilesystemmetadata_p.h')
-rw-r--r-- | src/corelib/io/qfilesystemmetadata_p.h | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/src/corelib/io/qfilesystemmetadata_p.h b/src/corelib/io/qfilesystemmetadata_p.h index b09223d656..55e44d52c7 100644 --- a/src/corelib/io/qfilesystemmetadata_p.h +++ b/src/corelib/io/qfilesystemmetadata_p.h @@ -120,16 +120,22 @@ public: // Attributes HiddenAttribute = 0x00100000, SizeAttribute = 0x00200000, // Note: overlaps with QAbstractFileEngine::LocalDiskFlag - ExistsAttribute = 0x00400000, + ExistsAttribute = 0x00400000, // For historical reasons, indicates existence of data, not the file +#if defined(Q_OS_WIN) + WasDeletedAttribute = 0x0, +#else + WasDeletedAttribute = 0x40000000, // Indicates the file was deleted +#endif - Attributes = HiddenAttribute | SizeAttribute | ExistsAttribute, + Attributes = HiddenAttribute | SizeAttribute | ExistsAttribute | WasDeletedAttribute, - // Times - CreationTime = 0x01000000, // Note: overlaps with QAbstractFileEngine::Refresh + // Times - if we know one of them, we know them all + AccessTime = 0x02000000, + BirthTime = 0x02000000, + MetadataChangeTime = 0x02000000, ModificationTime = 0x02000000, - AccessTime = 0x04000000, - Times = CreationTime | ModificationTime | AccessTime, + Times = AccessTime | BirthTime | MetadataChangeTime | ModificationTime, // Owner IDs UserId = 0x10000000, @@ -144,6 +150,7 @@ public: | QFileSystemMetaData::DirectoryType | QFileSystemMetaData::SequentialType | QFileSystemMetaData::SizeAttribute + | QFileSystemMetaData::WasDeletedAttribute | QFileSystemMetaData::Times | QFileSystemMetaData::OwnerIds, @@ -191,6 +198,7 @@ public: bool isLegacyLink() const { return (entryFlags & LegacyLinkType); } bool isSequential() const { return (entryFlags & SequentialType); } bool isHidden() const { return (entryFlags & HiddenAttribute); } + bool wasDeleted() const { return (entryFlags & WasDeletedAttribute); } #if defined(Q_OS_WIN) bool isLnkFile() const { return (entryFlags & WinLnkType); } #else @@ -201,9 +209,10 @@ public: QFile::Permissions permissions() const { return QFile::Permissions(Permissions & entryFlags); } - QDateTime creationTime() const; - QDateTime modificationTime() const; QDateTime accessTime() const; + QDateTime birthTime() const; + QDateTime metadataChangeTime() const; + QDateTime modificationTime() const; QDateTime fileTime(QAbstractFileEngine::FileTime time) const; uint userId() const; @@ -211,6 +220,7 @@ public: uint ownerId(QAbstractFileEngine::FileOwner owner) const; #ifdef Q_OS_UNIX + void fillFromStatxBuf(const struct statx &statBuffer); void fillFromStatBuf(const QT_STATBUF &statBuffer); void fillFromDirEnt(const QT_DIRENT &statBuffer); #endif @@ -233,14 +243,16 @@ private: // Platform-specific data goes here: #if defined(Q_OS_WIN) DWORD fileAttribute_; - FILETIME creationTime_; + FILETIME birthTime_; + FILETIME changeTime_; FILETIME lastAccessTime_; FILETIME lastWriteTime_; #else // msec precision - qint64 creationTime_; - qint64 modificationTime_; qint64 accessTime_; + qint64 birthTime_; + qint64 metadataChangeTime_; + qint64 modificationTime_; uint userId_; uint groupId_; @@ -268,8 +280,11 @@ inline QDateTime QFileSystemMetaData::fileTime(QAbstractFileEngine::FileTime tim case QAbstractFileEngine::AccessTime: return accessTime(); - case QAbstractFileEngine::CreationTime: - return creationTime(); + case QAbstractFileEngine::BirthTime: + return birthTime(); + + case QAbstractFileEngine::MetadataChangeTime: + return metadataChangeTime(); } return QDateTime(); @@ -277,9 +292,14 @@ inline QDateTime QFileSystemMetaData::fileTime(QAbstractFileEngine::FileTime tim #endif #if defined(Q_OS_UNIX) -inline QDateTime QFileSystemMetaData::creationTime() const { return QDateTime::fromMSecsSinceEpoch(creationTime_); } -inline QDateTime QFileSystemMetaData::modificationTime() const { return QDateTime::fromMSecsSinceEpoch(modificationTime_); } -inline QDateTime QFileSystemMetaData::accessTime() const { return QDateTime::fromMSecsSinceEpoch(accessTime_); } +inline QDateTime QFileSystemMetaData::birthTime() const +{ return birthTime_ ? QDateTime::fromMSecsSinceEpoch(birthTime_) : QDateTime(); } +inline QDateTime QFileSystemMetaData::metadataChangeTime() const +{ return metadataChangeTime_ ? QDateTime::fromMSecsSinceEpoch(metadataChangeTime_) : QDateTime(); } +inline QDateTime QFileSystemMetaData::modificationTime() const +{ return modificationTime_ ? QDateTime::fromMSecsSinceEpoch(modificationTime_) : QDateTime(); } +inline QDateTime QFileSystemMetaData::accessTime() const +{ return accessTime_ ? QDateTime::fromMSecsSinceEpoch(accessTime_) : QDateTime(); } inline uint QFileSystemMetaData::userId() const { return userId_; } inline uint QFileSystemMetaData::groupId() const { return groupId_; } @@ -318,9 +338,9 @@ inline void QFileSystemMetaData::fillFromFileAttribute(DWORD fileAttribute,bool inline void QFileSystemMetaData::fillFromFindData(WIN32_FIND_DATA &findData, bool setLinkType, bool isDriveRoot) { fillFromFileAttribute(findData.dwFileAttributes, isDriveRoot); - creationTime_ = findData.ftCreationTime; + birthTime_ = findData.ftCreationTime; lastAccessTime_ = findData.ftLastAccessTime; - lastWriteTime_ = findData.ftLastWriteTime; + changeTime_ = lastWriteTime_ = findData.ftLastWriteTime; if (fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY) { size_ = 0; } else { @@ -343,9 +363,9 @@ inline void QFileSystemMetaData::fillFromFindData(WIN32_FIND_DATA &findData, boo inline void QFileSystemMetaData::fillFromFindInfo(BY_HANDLE_FILE_INFORMATION &fileInfo) { fillFromFileAttribute(fileInfo.dwFileAttributes); - creationTime_ = fileInfo.ftCreationTime; + birthTime_ = fileInfo.ftCreationTime; lastAccessTime_ = fileInfo.ftLastAccessTime; - lastWriteTime_ = fileInfo.ftLastWriteTime; + changeTime_ = lastWriteTime_ = fileInfo.ftLastWriteTime; if (fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY) { size_ = 0; } else { |