• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルサイズを変更したい)

ファイルサイズを変更する方法

このQ&Aのポイント
  • Visual Studio 2010を使用している場合、C言語で書かれたファイルのサイズを変更する方法を教えてください。
  • 指定したバイナリファイルのサイズを変更するには、ファイルを読み込んで新しいサイズに合わせてデータを追加し、書き込む必要があります。
  • 具体的には、「abcdefg」の後に0を追加してファイルサイズを増やすことができます。ただし、5KBになるまで追加する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>size = fread( buf, sizeof( unsigned char ), sizeof (fp), fp ); ここ、何がしたい? 「sizeof (fp)」が何を意味するか判ってる? fpってのは「ポインタ変数」だから「その処理系で、ポインタを表すのに必要なバイト数になる」っての、理解してる? 処理系が64ビット系なら「sizeof(ポインタ変数)」は、常に「8」になる。 処理系が32ビット系なら「sizeof(ポインタ変数)」は、常に「4」になる。 処理系が16ビット系なら「sizeof(ポインタ変数)」は、常に「2」になる。 まず「test.txtの中身を、丸々、そのままWtest.txtにコピーするプログラム」を作ってみよう。 今は、先頭の1キロバイトさえもちゃんとコピー出来てないから、お話にならない。 丸コピープログラムが出来たら、test.txtの中身が、1バイトでも、3バイトでも、10バイトでも、20バイトでも、100バイトでも、きちんと「丸々、そのまま、コピー出来ている事」を確認しよう。 話はそれからだ。

KtoTtoA
質問者

補足

int main(void) { FILE *fp, *fpw; char *fname = "test.txt"; char *fname_w = "Wtest.txt"; unsigned char buf[10000]; for(int i = 0; i < 10000; i++){ buf[i] = 0; } fp = fopen( fname, "rb" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } fpw = fopen(fname_w, "wb"); if(fpw == NULL){ printf( "%sファイルが開けません\n", fname_w ); return -1; } fread( buf, sizeof( unsigned char ), 10000, fp ); fwrite( buf, sizeof( unsigned char ), 10000, fpw); return 0; } 100バイトまでコピーすることができました。 これが100メガバイトや1ギガバイトになって、実行するとプログラムが終了しました。となってしまうのですが、それはなぜでしょうか?

その他の回答 (1)

回答No.1

ファイルを読み込む前に、bufをすべて0で埋めておけば、ファイルのデータを読み込んだ部分以外は0になるので、bufを5120byte分ファイルに書き出せばいいのでは?

KtoTtoA
質問者

補足

回答有り難うございます。 教えていただいたとおり0で初期化してからでできました。 しかしファイルサイズを大きくしたときに失敗してしまいました。。。

関連するQ&A