[過去ログ] Win32API質問箱 Build125 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
442(1): ◆QZaw55cn4c 2019/10/09(水)21:21 ID:ggd9iNPq(1/4) AAS
質問です。
SetFilePointer()
外部リンク:docs.microsoft.com
を FILE_END で使ったことのある方はおられますか?
第3引数 PLONG lpDistanceToMoveHigh を 0 (そして第 2 引数 LONG lDistanceToMove も 0 )で使うと、FILE_END であっても当のファイルが 4GB 以上の場合にはポインタがファイルの最後に設定されない現象があるようです
この場合ダミー変数(毎回 0 を投入している)を設けて lpDistanceToMoveHigh にそのアドレスを設定すると FILE_END がその本来の意味を示すようにみえます。
推量形で記述しているのは、私の環境(mingw64-gcc)ではコンパイラのオプティマイザが過剰に効いている可能性があり -O0 でコンパイルしてはじめて、ある程度この現象が確認できたという事情のためです。
これは一般的な話なのでしょうか?
443(1): ◆QZaw55cn4c 2019/10/09(水)21:24 ID:ggd9iNPq(2/4) AAS
>>442
ソースを晒します
外部リンク:ideone.com
444(2): 2019/10/09(水)21:49 ID:75Pp/Qaq(1) AAS
longの場所になぜintを使う
445(2): ◆QZaw55cn4c 2019/10/09(水)22:06 ID:ggd9iNPq(3/4) AAS
>>444
printf("sizeof(int):%d, sizeof(LONG):%d\n", sizeof(int), sizeof(LONG));
$ ./a.exe
sizeof(int):4, sizeof(LONG):4
446(1): 2019/10/09(水)22:12 ID:wmrCsqX1(1) AAS
lpDistanceToMoveHighがNULLの時のFILE_ENDは単純にファイルサイズも下位32bitだけ見て処理してそう
でかいファイル扱うなら素直にSetFilePointerEx使った方がよさげ
447(1): ◆QZaw55cn4c 2019/10/09(水)22:39 ID:ggd9iNPq(4/4) AAS
>>446
*Ex には気がつきませんでした
昔書いたものをみると
s1 = GetFileSize(f, &s2);
SetFilePointer(f, s1, (PLONG)&s2, FILE_BEGIN);
WriteFile(f, p, strlen(p), &n, 0);
ってやっていましたから、どうも、昔も同じところで嵌ったらしく、お茶を濁す方法まで昔と同じのまま、しかもその記憶が今はない…
もうなにもかも忘れてしまった…
コメントありがとうございました
上下前次1-新書関写板覧索設栞歴
あと 555 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.196s*