Chr*_*ris 3 c++ optimization windows-ce
我有一个函数来获取文件的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(), 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;
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*fin 11
至少对于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;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的编译器支持它,您可能希望使用long long而不是__int64.你可能不希望使用int,虽然,因为这将只对文件的正常工作最高为20亿,比更大的文件现在很常见的(尽管可能不那么常见的一个WinCE的设备).
我希望这比大多数其他方法更快.它根本不需要打开文件本身,只需查找文件的目录条目(或者,在类似NTFS的情况下,它的主文件表条目).