Index: src/libchcore/TLocalFilesystemFile.cpp =================================================================== diff -u -N -rf49b990b02af82798b59d35fec2374d23c6bb053 -r41383599835bbab64d854eed179a7db21a59c6bf --- src/libchcore/TLocalFilesystemFile.cpp (.../TLocalFilesystemFile.cpp) (revision f49b990b02af82798b59d35fec2374d23c6bb053) +++ src/libchcore/TLocalFilesystemFile.cpp (.../TLocalFilesystemFile.cpp) (revision 41383599835bbab64d854eed179a7db21a59c6bf) @@ -27,6 +27,7 @@ #include "TLocalFilesystem.h" #include "TCoreWin32Exception.h" #include "TFileException.h" +#include "TFileInfo.h" namespace chcore { @@ -243,6 +244,29 @@ return uli.QuadPart; } + void TLocalFilesystemFile::GetFileInfo(TFileInfo& tFileInfo) const + { + if (!IsOpen()) + THROW_FILE_EXCEPTION(eErr_FileNotOpen, ERROR_INVALID_HANDLE, m_pathFile, L"File not open. Cannot get file info."); + + BY_HANDLE_FILE_INFORMATION bhfi; + + if (!::GetFileInformationByHandle(m_hFile, &bhfi)) + { + DWORD dwLastError = GetLastError(); + THROW_FILE_EXCEPTION(eErr_CannotGetFileInfo, dwLastError, m_pathFile, L"Retrieving file info from handle failed."); + } + + ULARGE_INTEGER uli; + uli.HighPart = bhfi.nFileSizeHigh; + uli.LowPart = bhfi.nFileSizeLow; + + tFileInfo.SetFilePath(m_pathFile); + tFileInfo.SetAttributes(bhfi.dwFileAttributes); + tFileInfo.SetFileTimes(bhfi.ftCreationTime, bhfi.ftLastAccessTime, bhfi.ftLastWriteTime); + tFileInfo.SetLength64(uli.QuadPart); + } + TSmartPath TLocalFilesystemFile::GetFilePath() const { return m_pathFile;