-1

我使用了某人在stackoverflow上发布的以下代码来检查大文件(12gb)的大小。但是,当我检查此功能时,它会显示不同的大小(267 mb)。有人可以解释一下是什么问题吗?对于 2gb , 3 gb 的文件大小,代码正确显示大小。

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;
   LPCTSTR  lpFileName = L"C:\\Foo\\Bar.ext";

   hFind = FindFirstFile(lpFileName , &FindFileData);
   if (hFind == INVALID_HANDLE_VALUE) 
   {
      printf ("File not found (%d)\n", GetLastError());
      return -1;
   } 
   else 
   {
      ULONGLONG FileSize = FindFileData.nFileSizeHigh;
      FileSize <<= sizeof( FindFileData.nFileSizeHigh ) * 8; 
      FileSize |= FindFileData.nFileSizeLow;
      _tprintf (TEXT("file size is %u\n"), FileSize);
      FindClose(hFind);
   }
   return 0;

}
4

1 回答 1

3

程序的以下行打印 64 位数字:

_tprintf (TEXT("file size is %u\n"), FileSize);

在 Windows 中,您需要使用格式说明符%I64u来格式化 64 位(无符号)整数。

于 2013-01-29T01:11:33.223 回答