我在C中創建一個歸檔程序,我希望它保存我提供的文件,列出並提取它們。
我有很多問題,因爲我用一個文本文件進行保存,如果我想處理二進制文件,如音樂或照片,這不是最好的選擇,因爲當我提取它們時,它們不能正確執行(它們已損壞) 。 爲了解決這個問題,我想創建一個二進制檔案文件。我可以在二進制文件中使用fgetc()或fputc()嗎?
代碼文件寫入(上提取)如下:
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()
和fwrite()
?
感謝
是的,你應該改變,或者你可能花費大量的時間用調試器發現你的fget得到了一些無效值並且造成了破壞 – abasu 2013-05-10 09:27:23
當讀寫一個字母來打開一個二進制文件時沒有問題。 – BLUEPIXY 2013-05-10 09:35:24
@abasu你在說什麼?我在這裏看到使用'fgetc'沒有問題。停止誤診。我確實看到了幾個未聲明的變量的用法。出於這個原因,我們不能幫助AndreaGottardi與此代碼。 AndreaGottardi:創建一個最小的可編譯測試用例,將結構中的信息(不一定是'struct')寫入文件。然後創建一個最小的,可編譯的測試用例,將文件中的信息讀取到結構中。在這裏提供他們兩個,但只有在他們實際編譯時...提出一個關於你不明白的東西的問題...... – Sebivor 2013-05-10 09:38:24