我在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