私はこのc++コードを使用して、Windows内のいくつかのファイルのファイルサイズを検索しました(Visual Studioを使用)。
(p_findFileData->nFileSizeHigh * MAXDWORD) + p_findFileData->nFileSizeLow);
ファイルが4GBより大きい場合、これでは正しいファイルサイズが得られませんでした。いくつかの調査の後、私は試しました:
(p_findFileData->nFileSizeHigh * (MAXDWORD+1)) + p_findFileData->nFileSizeLow);
nfilesizehighとnfilesizelowはそれぞれファイルサイズの64ビット値の32ビットであり、ファイルサイズ値が32ビットより大きい場合は、maxdword(私の場合は0xffffffff)にnfilesizehighを掛けます。2番目の解決策も機能せず、サイズが以前よりも小さくなりました。私は再びこれを試しました:
ULONGLONG FileSize = (FindFileData.nFileSizeHigh * 4294967296) + FindFileData.nFileSizeLow;
そしてそれはうまくいった。また、別のソリューションを使用して、これと一緒にファイルサイズも取得しました。
ULONGLONG FileSize = FindFileData.nFileSizeHigh;
FileSize <<= sizeof( FindFileData.nFileSizeHigh ) *8;
FileSize |= FindFileData.nFileSizeLow;
上記の解決策も機能します:
コードの内部動作を知りたいので、最初の2つのソリューションが機能しなかった理由と、可能であれば最後のソリューションの説明も知りたいと思いました。助けていただければ幸いです。