-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);

%I64uWindowsでは、フォーマット指定子を使用して64ビット(符号なし)整数をフォーマットする必要があります。

于 2013-01-29T01:11:33.223 に答える