加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

更快获取文件大小信息的方法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的情况下,它的主文件表条目).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读