C でアーカイブ プログラムを作成しています。提供したファイルを保存し、一覧表示して抽出します。
保存にテキスト ファイルを使用したため、多くの問題がありました。音楽や写真などのバイナリ ファイルを処理する場合、それらを抽出すると正しく実行されない (破損している) ため、最適な選択ではありません。この問題を解決するために、バイナリ アーカイブ ファイルを作成したいと考えました。
ファイル書き込み (抽出時) のコードは次のとおりです。
void scriviFile(const char * arrivo) //scrive i file creati in precedenza
{
FILE * partenza;
FILE * target;
int c;
int spazio = 'a';
int i = 0;
int pos;
char * path;
path = collegaSlash(getcwd(NULL, 0), nome);
partenza = fopen(path, "rb");
fseek(partenza, inizio, SEEK_SET);
target = fopen(arrivo, "wb"); //apro il file
if (target) { //se è aperto
while ((c = fgetc(partenza)) != EOF && ftell(partenza)<=fine-10) { //e il carattere preso non eccede la fine del file
fputc(c, target);
fputc(c, stdout);
pos = ftell(partenza);
if(pos==fine)
{
break;
}
//scrivo lo stesso carattere in out (file in uscita)
} //
fclose(target); //chiudo il file
fclose(partenza);
}
else
{
printf("errore di scrittura del file \n");
}
}
バイナリファイルを正しく抽出する必要があるため、上記で書いたコードを使用できますか、またはすべてfgetc()
とfputc()
関数をfread()
andで変更する必要がありfwrite()
ますか?
ありがとう