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;
}
// ---------------------------------------------------------------------------
C++Builderでも、内容がVCLのことであればここで聞くのも分かります。
しかしfopenはCの標準関数です。Delphiとは何の関係もありません。
ここではなく、C/C++を扱った掲示板等で質問された方が良いかと思います。
ツイート | ![]() |