- ベストアンサー
ファイル末尾10バイトを削る
ファイルを開き、末尾10バイトを削り、上書きする というプログラムを作成しています。 とりあえず、以下のようなソースが出来ました。 ------------------------------------------------------------------ ifp = fopen( "openfile.dat", "rb"); ofp = fopen( "outfile.dat", "wb" ); fseek( ifp, -10, SEEK_END ); pos_end = ftell( ifp ); fseek( ifp, 0, SEEK_SET ); for( pos_now = ftell( ifp ) ; pos_now < pos_end; pos_now = ftell( ifp )){ rCnt = fread( pbuf, sizeof( char ), 1, ifp ); f( rCnt == EOF ) break; fwrite( pbuf, sizeof( char ), 1, ofp ); } fclose( ifp ); *(openfile削除) *(リネーム処理:outfile.dat -> openfile.dat) 以下略 ------------------------------------------------------------------ ソースにあるとおり、 ファイルを開く -> ファイルの末尾10バイト目を記憶する。 -> アウトファイルを開く -> 記憶した位置までコピーする -> オープンファイルの削除 -> リネーム処理 という順番で処理を行っています。 本来は、 ファイルを開く -> ファイルの末尾10バイト目にEOFをいれる -> ファイルを閉じる みたいな感じでやるつもりだったのですが、うまくいきませんでした。 後者のやり方や「私ならこうする!」等アドバイスがありましたら、是非お聞かせください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
お礼
ありがとうございます。 SetEndOfFile()を調べましたところ、 本当に簡単に作成することが出来ました。 Win32APIっていうのをあまり理解していないのですが、 これから勉強しようと思います。 一応ソース書いておきます。 こんなんでいいのでしょうか? ---------------------------------------- #include <windows.h> #include <stdio.h> int main(int argc, char **argv) { HANDLE hFile; hFile = CreateFile( argv[1] , GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL ); if (hFile == INVALID_HANDLE_VALUE) { printf("ファイルオープンエラー\n"); return 1; } SetFilePointer( hFile, -128, NULL, FILE_END ); SetEndOfFile( hFile ); CloseHandle(hFile); return 0; } ----------------------------------------