NowNowさん、各無しさん
おはようございます。
お返事が遅くなりすいません。データを入れているサーバーのHDDが調子が悪く
壊れかかっているとかで...。
li.LowPart = (6442450943)&0x00000000FFFFFFFF;
li.HighPart = ((6442450943)&0xFFFFFFFF00000000) >> 32;
でliにきちんと6442450943入ることをデバックモードで確認できました。
ありがとうございます。
データの読込は、freadのままだったので、ReadFileにして読み込みファイルエンド
まで行くか、現在、約5GBのファイルを使って確認しています(昨日間違って、freadの
ままで実行させてしまい、2GB計算するのに6時間半かかっていました)。
int i, HEADER_SIZE, HEADER_SIZE_1;
li.LowPart = (HEADER_SIZE+HEADER_SIZE_1*i)&0x00000000FFFFFFFF;
li.HighPart = ((HEADER_SIZE+HEADER_SIZE_1*i)&0xFFFFFFFF00000000) >> 32;
SetFilePointerEx(hFile, li, NULL, FILE_BEGIN);
//RAW_Data_infoは構造体の構造体
RAW_Data_info *data;
n = ReadFile(hFile, data, sizeof(RAW_Data_info), &dwResult, NULL) ;
また、結果が出ましたらご報告させていただきます。
> int i, HEADER_SIZE, HEADER_SIZE_1;
> li.LowPart = (HEADER_SIZE+HEADER_SIZE_1*i)&0x00000000FFFFFFFF;
> li.HighPart = ((HEADER_SIZE+HEADER_SIZE_1*i)&0xFFFFFFFF00000000) >> 32;
> SetFilePointerEx(hFile, li, NULL, FILE_BEGIN);
64ビットのアドレス計算が、intで行われています。
intが32ビットだとすると、正しく計算が行われていないかもしれません。
VC6で試したところ、
LONGLONG ll = 0x7FFFFFFF * 0x00000002;
が、ll = 0xfffffffffffffffeに、
LONGLONG ll = (LONGLONG)0x7FFFFFFF * 0x00000002;
が、ll = 0x00000000fffffffeになりました。
キャストをするべきかもしれません。
ところで、上位32ビットと下位32ビットを別々に代入しなくても、
li.QuadPart = (LONGLONG)HEADER_SIZE+HEADER_SIZE_1*i;
このようにしても上位下位分けて代入したのと同じ値になっているようでした。
NowNowさん、みなさん
おはようございます。
無事にデータを読み込ませることが出来ました。いろいろとご教示頂き
ありがとうございました。