summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfilesystemengine_win.cpp
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@digia.com>2013-11-12 09:54:53 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-12 10:39:54 +0100
commitf7f9126ed7d2fcf7a995409d0b8bbeab766d1c14 (patch)
tree58d7ff8a1879d9bde45a08f6d4569b594c9fad8a /src/corelib/io/qfilesystemengine_win.cpp
parent0de83705316d82273e0d445119ab1d4ee1c2f980 (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.cpp27
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);