代码参考自lailx的博客:获取文件大小的4种方法( )
1 // TestGetFileSize.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include6 #include 7 #include 8 #include 9 10 using namespace std;11 12 size_t GetFileSize1(LPCTSTR lpszFileName)13 {14 size_t nResult = 0;15 HANDLE handle = CreateFile(lpszFileName, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);16 if (handle != INVALID_HANDLE_VALUE)17 {18 nResult = GetFileSize(handle, NULL);19 CloseHandle(handle);20 }21 return nResult;22 }23 24 size_t GetFileSize2(LPCTSTR lpszFileName)25 {26 size_t nResult = 0;27 WIN32_FIND_DATA fileInfo; 28 HANDLE hFind; 29 hFind = FindFirstFile(lpszFileName, &fileInfo); 30 if(hFind != INVALID_HANDLE_VALUE) 31 nResult = fileInfo.nFileSizeLow; 32 FindClose(hFind); 33 return nResult;34 }35 36 size_t GetFileSize3(LPCTSTR lpszFileName)37 {38 size_t nResult = 0;39 FILE* file = fopen(lpszFileName, "r");40 if (file)41 {42 nResult = filelength(fileno(file));43 fclose(file);44 }45 return nResult;46 }47 48 size_t GetFileSize4(LPCTSTR lpszFileName)49 {50 size_t nResult = 0;51 struct _stat info;52 _stat(lpszFileName, &info);53 nResult = info.st_size;54 return nResult;55 }56 57 DWORD Test(size_t (*pFunc)(LPCTSTR), LPCTSTR lpszFileName)58 {59 DWORD dwResult = 0;60 size_t nFileSize = 0;61 DWORD tick = GetTickCount();62 for (int i=0; i<10000; i++)63 {64 nFileSize = pFunc(lpszFileName);65 // cout<<"FileSize = "< <
测试结果:
当目标文件正在被写入的时候,体积逐渐增大,但测试发现第GetFileSize2()、GetFileSize4()返回的文件大小是固定不变的,因此在需要监视文件大小时,这两种方法不可取。