diff options
author | Maurice Kalinowski <maurice.kalinowski@digia.com> | 2013-11-12 09:54:53 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-12 10:39:54 +0100 |
commit | f7f9126ed7d2fcf7a995409d0b8bbeab766d1c14 (patch) | |
tree | 58d7ff8a1879d9bde45a08f6d4569b594c9fad8a /src/corelib/io/qfilesystemengine_win.cpp | |
parent | 0de83705316d82273e0d445119ab1d4ee1c2f980 (diff) |
change to basic file info on WinRT
FILE_FULL_DIR_INFO failed under certain circumstances on WinRT and
provides far more information than required. Hence prefer the basic
version in every case and standard for files with size description.
Change-Id: I63f1365f83cdd5d69f81278411f822dbd361fa92
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Diffstat (limited to 'src/corelib/io/qfilesystemengine_win.cpp')
-rw-r--r-- | src/corelib/io/qfilesystemengine_win.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 896a232299..46b2f041c1 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -956,17 +956,22 @@ bool QFileSystemEngine::fillMetaData(HANDLE fHandle, QFileSystemMetaData &data, } SetErrorMode(oldmode); #else // !Q_OS_WINRT - FILE_FULL_DIR_INFO fileInfo; - if (GetFileInformationByHandleEx(fHandle, FileFullDirectoryInfo, &fileInfo, sizeof(fileInfo))) { - data.fillFromFileAttribute(fileInfo.FileAttributes); - data.creationTime_.dwHighDateTime = fileInfo.CreationTime.HighPart; - data.creationTime_.dwLowDateTime = fileInfo.CreationTime.LowPart; - data.lastAccessTime_.dwHighDateTime = fileInfo.LastAccessTime.HighPart; - data.lastAccessTime_.dwLowDateTime = fileInfo.LastAccessTime.LowPart; - data.lastWriteTime_.dwHighDateTime = fileInfo.LastWriteTime.HighPart; - data.lastWriteTime_.dwLowDateTime = fileInfo.LastWriteTime.LowPart; - data.fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY ? data.size_ = 0 : data.size_ = fileInfo.AllocationSize.QuadPart; - data.knownFlagsMask |= data.Times | data.SizeAttribute; + FILE_BASIC_INFO fileBasicInfo; + if (GetFileInformationByHandleEx(fHandle, FileBasicInfo, &fileBasicInfo, sizeof(fileBasicInfo))) { + data.fillFromFileAttribute(fileBasicInfo.FileAttributes); + data.creationTime_.dwHighDateTime = fileBasicInfo.CreationTime.HighPart; + data.creationTime_.dwLowDateTime = fileBasicInfo.CreationTime.LowPart; + data.lastAccessTime_.dwHighDateTime = fileBasicInfo.LastAccessTime.HighPart; + data.lastAccessTime_.dwLowDateTime = fileBasicInfo.LastAccessTime.LowPart; + data.lastWriteTime_.dwHighDateTime = fileBasicInfo.LastWriteTime.HighPart; + data.lastWriteTime_.dwLowDateTime = fileBasicInfo.LastWriteTime.LowPart; + if (!(data.fileAttribute_ & FILE_ATTRIBUTE_DIRECTORY)) { + FILE_STANDARD_INFO fileStandardInfo; + if (GetFileInformationByHandleEx(fHandle, FileStandardInfo, &fileStandardInfo, sizeof(fileStandardInfo))) + data.size_ = fileStandardInfo.EndOfFile.QuadPart; + } else + data.size_ = 0; + data.knownFlagsMask |= QFileSystemMetaData::Times | QFileSystemMetaData::SizeAttribute; } #endif // Q_OS_WINRT return data.hasFlags(what); |