c++builder 4GB超のファイル書き込みがNG


ウォレス  2011-12-16 19:20:03  No: 41371

C++Builder2010、WinXP32bit です。(Delphiでなくてごめんなさい)

レガシー?な関数fopenで4GB超のファイルアペンドがうまくできません。
といいますか、ある日突然できなくなりました。
勿論書き込んでいるHDDはNTFSです。

以下に再現コードを載せます。ご教授ください。
(無駄なことをしているように見えますが、ヘルパ関数内で行っているコードを再現用に組みなおしていますので、こうなります)

***************************************************

#include <stdio.h>  を追加

// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  FILE *fo;

  unsigned char *tmp = new unsigned char[1024 * 1024 * 256];

  wchar_t *fname = L"E:\\test.bin";

  char *fname2 = "E:\\test.bin";

  for (int id = 0; id < 20; id++)  //5 GB のファイルができるはず  4294967296 byteしかできない。
  {

    if ((fo = _wfopen(fname, L"ab")) == NULL)
    //if ((fo = fopen(fname2, "ab")) == NULL)  //fopenでも同じ
    {
      return;
    }

    int s;

    s = fwrite(tmp, sizeof(char), 1024 * 1024 * 256, fo);

    fclose(fo);

  }

  delete[]tmp;

}
// ---------------------------------------------------------------------------


マキシマス  2011-12-17 01:09:45  No: 41372

C++Builderでも、内容がVCLのことであればここで聞くのも分かります。
しかしfopenはCの標準関数です。Delphiとは何の関係もありません。
ここではなく、C/C++を扱った掲示板等で質問された方が良いかと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加