更快获取文件大小信息的方法C.
发布时间:2020-12-16 10:23:47 所属栏目:百科 来源:网络整理
导读:我有一个函数来获取文件的FileSize.我在WinCE上运行它.这是我目前的代码,似乎特别慢 int Directory::GetFileSize(const std::string filepath){ int filesize = -1;#ifdef linux struct stat fileStats; if(stat(filepath.c_str(),fileStats) != -1) filesiz
我有一个函数来获取文件的FileSize.我在WinCE上运行它.这是我目前的代码,似乎特别慢
int Directory::GetFileSize(const std::string &filepath) { int filesize = -1; #ifdef linux struct stat fileStats; if(stat(filepath.c_str(),&fileStats) != -1) filesize = fileStats.st_size; #else std::wstring widePath; Unicode::AnsiToUnicode(widePath,filepath); HANDLE hFile = CreateFile(widePath.c_str(),FILE_SHARE_READ | FILE_SHARE_WRITE,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if (hFile > 0) { filesize = ::GetFileSize( hFile,NULL); } CloseHandle(hFile); #endif return filesize; } 解决方法
至少对于Windows,我想我会使用这样的东西:
__int64 Directory::GetFileSize(std::wstring const &path) { WIN32_FIND_DATAW data; HANDLE h = FindFirstFileW(path.c_str(),&data); if (h == INVALID_HANDLE_VALUE) return -1; FindClose(h); return data.nFileSizeLow | (__int64)data.nFileSizeHigh << 32; } 如果您使用的编译器支持它,您可能希望使用long long而不是__int64.你可能不想使用int,因为它只适用于高达2 GB的文件,而且大于这个文件现在很常见(尽管在WinCE设备上可能不常见). 我希望这比大多数其他方法更快.它根本不需要打开文件本身,只需查找文件的目录条目(或者,在类似NTFS的情况下,它的主文件表条目). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |