gpt4 book ai didi

c++ - 获取文件大小信息的更快方法 C++

转载 作者:太空狗 更新时间:2023-10-29 19:46:18 25 4
gpt4 key购买 nike

我有一个函数可以获取文件的文件大小。我在 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(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 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 之类的情况下,它的主文件表条目)。

关于c++ - 获取文件大小信息的更快方法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com