取得4G以上的文件大小

205 阅读1分钟

很少使用过超越FAT32分区限制大小的文件,这不,需要在其他编程环境下取得大于4G的文件大小,查得函数dwSizeLow = GetFileSize((HANDLE)hFile, &dwSizeHigh); 可以取得文件大小的高低位,组合成的LONGLONG型正是一个满足NTFS最大文件大小限制的类型。
写一个DLL,只有一个导出函数:

extern "C" __declspec(dllexport) void Get_FileSize(LPCTSTR strFileName,LPSTR strFileSize/*返回文件大小的字符串型*/)
{
//打开文件以便取得文件大小
OFSTRUCT of;
DWORD dwSizeLow,dwSizeHigh,dwError;  //低位,高位,错误代码
HFILE hFile=OpenFile(strFileName,&of,OF_READ);
try

dwSizeLow = GetFileSize((HANDLE)hFile, &dwSizeHigh);  //就是他了
// 若失败,返回 -1
if (dwSizeLow == 0xFFFFFFFF && (dwError = GetLastError()) != NO_ERROR ){

strcpy(strFileSize,"-1");
}
else
{
LONGLONG llSize,llPow;
llPow=4294967296; //(LONGLONG)pow(2,32);
llSize=dwSizeHigh*llPow+dwSizeLow; //可能是大于4G的怪物

   sprintf(strFileSize,"%I64u",llSize);
}
}
catch(...)
{
strcpy(strFileSize,"-1");
}
if(hFile)CloseHandle((HANDLE)hFile);
}