我有一個函數來獲取文件的FileSize。我在WinCE上運行這個。這是我這似乎particularily慢更快的方法來獲取文件大小信息C++
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;
}
您可能需要確認這是實際慢的代碼位。我沒有看到任何特別的原因,除非你的文件系統包含大量文件[因此,在所有文件中搜索需要一段時間才能打開]。 –
@MatsPetersson你有一點,因爲我發佈這個,我意識到它可能是UnicodeToAnsi函數,因爲它涉及字符串操作。我重構了代碼以使用更少的代碼並將速度提高了30% – Chris
如果您正在執行「許多」AnsiToUnicode調用,您可能需要構建一個緩存,檢查是否已經完成此文件並返回前一個文件。有些散列可能對此有所幫助。 –