From f7f9126ed7d2fcf7a995409d0b8bbeab766d1c14 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Tue, 12 Nov 2013 09:54:53 +0100 Subject: 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 --- src/corelib/io/qfilesystemengine_win.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src/corelib/io/qfilesystemengine_win.cpp') 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); -- cgit v1.2.3