【发布时间】:2013-01-04 02:52:51
【问题描述】:
我是 C 的新手,我正在尝试编写一个程序来复制文件,以便我可以学习文件的基础知识。我的代码将一个文件作为输入,通过使用 fseek 和 ftell 减去它的开头来计算它的长度。然后,它使用 fwrite 写入,基于我可以从它的手册页中获得的内容,一个数据元素,(END - START)元素长,到 OUT 指向的流,从 FI 给出的位置获取它们。问题是,尽管它确实产生了“复制输出”,但该文件与原始文件不同。我究竟做错了什么?我尝试将输入文件读入一个变量,然后从那里写入,但这也无济于事。我究竟做错了什么? 谢谢
int main(int argc, char* argv[])
{
FILE* fi = fopen(argv[1], "r"); //create the input file for reading
if (fi == NULL)
return 1; // check file exists
int start = ftell(fi); // get file start address
fseek(fi, 0, SEEK_END); // go to end of file
int end = ftell(fi); // get file end address
rewind(fi); // go back to file beginning
FILE* out = fopen("copy output", "w"); // create the output file for writing
fwrite(fi,end-start,1,out); // write the input file to the output file
}
这应该有效吗?
{
FILE* out = fopen("copy output", "w");
int* buf = malloc(end-start); fread(buf,end-start,1,fi);
fwrite(buf,end-start,1,out);
}
【问题讨论】:
-
在您的
fwrite()调用中,第一个参数应该是指向内存中文件内容的指针(我在这里看不到您在哪里阅读)而不是fi本身。