更快地获取文件大小信息C++

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的情况下,它的主文件表条目).