- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルサイズを変更したい)
ファイルサイズを変更する方法
このQ&Aのポイント
- Visual Studio 2010を使用している場合、C言語で書かれたファイルのサイズを変更する方法を教えてください。
- 指定したバイナリファイルのサイズを変更するには、ファイルを読み込んで新しいサイズに合わせてデータを追加し、書き込む必要があります。
- 具体的には、「abcdefg」の後に0を追加してファイルサイズを増やすことができます。ただし、5KBになるまで追加する必要があります。
- みんなの回答 (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バイトでも、きちんと「丸々、そのまま、コピー出来ている事」を確認しよう。 話はそれからだ。
その他の回答 (1)
- m-take0220
- ベストアンサー率60% (477/782)
回答No.1
ファイルを読み込む前に、bufをすべて0で埋めておけば、ファイルのデータを読み込んだ部分以外は0になるので、bufを5120byte分ファイルに書き出せばいいのでは?
質問者
補足
回答有り難うございます。 教えていただいたとおり0で初期化してからでできました。 しかしファイルサイズを大きくしたときに失敗してしまいました。。。
補足
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ギガバイトになって、実行するとプログラムが終了しました。となってしまうのですが、それはなぜでしょうか?