C语言中的文件操作
最近,我开始用C语言进行文件操作,并且成功地将一个文件的内容复制到另一个文件 我先从文件的开头读取文件的内容,然后在同一文件的末尾写入相同的内容。(类似于追加)。但我不能这么做 这是我写的代码。 谁能告诉我,我在这里犯了什么错误C语言中的文件操作,c,file-io,C,File Io,最近,我开始用C语言进行文件操作,并且成功地将一个文件的内容复制到另一个文件 我先从文件的开头读取文件的内容,然后在同一文件的末尾写入相同的内容。(类似于追加)。但我不能这么做 这是我写的代码。 谁能告诉我,我在这里犯了什么错误 #include <stdio.h> int main(int argc, char **argv) { int size = 0, index = 0; char byte = 0; FILE *fp_read, *fp_write; if ((
#include <stdio.h>
int main(int argc, char **argv)
{
int size = 0, index = 0;
char byte = 0;
FILE *fp_read, *fp_write;
if ((fp_read = fopen(argv[1], "r+")) == NULL)
{
printf("Unable to Open File %s\n", argv[1]);
}
fp_write = fp_read;
fseek(fp_write, 0, SEEK_END);
size = ftell(fp_write);
printf("The Size of the file %s:\t%d\n", argv[1], size);
for (index = 0; index < size; index++)
{
if (fread(&byte, 1, 1, fp_read) != 1)
{
printf("Unable to Read from the file at Location:\t%d\n", index);
}
if (fwrite(&byte, 1, 1, fp_write) != 1)
{
printf("Unable to Write to the file at Location:\t%d\n", index);
}
}
if (fclose(fp_read))
{
printf("Unsuccessful in Closed the File\n");
}
return 0;
}
#包括
int main(int argc,字符**argv)
{
int size=0,index=0;
字符字节=0;
文件*fp_读取,*fp_写入;
如果((fp_read=fopen(argv[1],“r+”))==NULL)
{
printf(“无法打开文件%s\n”,argv[1]);
}
fp_写入=fp_读取;
fseek(fp_write,0,SEEK_END);
大小=ftell(fp_写入);
printf(“文件%s的大小:\t%d\n”,argv[1],大小);
对于(索引=0;索引
问候,
鸣人Uzumaki你的错误是将
fp_读
和fp_写
视为它们没有指向同一文件
对象。你的错误是将fp_读
和fp_写
视为它们没有指向同一文件
对象。你的错误是将fp\u读
和fp\u写
就像它们没有指向同一个文件
对象一样。您的错误是将fp\u读
和fp\u写
当作它们没有指向同一个文件
对象。与前面的答案类似,您将这两个指针视为引用不同的文件
流。执行fseek
功能时,您正在更改文件
指针的位置。作为检查,尝试在fp_read
和fp_write
上运行ftell
,并将它们打印出来,以确定它们是否位于不同的位置
编辑:如注释所述,您可以为fp\u write
变量打开第二个流,如下所示进行追加
fp_write = fopen("somefile", "a");
与前面的答案类似,您将这两个指针视为引用不同的
文件
流。执行fseek
功能时,您正在更改文件
指针的位置。作为检查,尝试在fp_read
和fp_write
上运行ftell
,并将它们打印出来,以确定它们是否位于不同的位置
编辑:如注释所述,您可以为fp\u write
变量打开第二个流,如下所示进行追加
fp_write = fopen("somefile", "a");
与前面的答案类似,您将这两个指针视为引用不同的
文件
流。执行fseek
功能时,您正在更改文件
指针的位置。作为检查,尝试在fp_read
和fp_write
上运行ftell
,并将它们打印出来,以确定它们是否位于不同的位置
编辑:如注释所述,您可以为fp\u write
变量打开第二个流,如下所示进行追加
fp_write = fopen("somefile", "a");
与前面的答案类似,您将这两个指针视为引用不同的
文件
流。执行fseek
功能时,您正在更改文件
指针的位置。作为检查,尝试在fp_read
和fp_write
上运行ftell
,并将它们打印出来,以确定它们是否位于不同的位置
编辑:如注释所述,您可以为fp\u write
变量打开第二个流,如下所示进行追加
fp_write = fopen("somefile", "a");
您应该标记语言(而不是将其放在标题中)。它可以帮助人们找到它,还可以改变代码语法的工作方式。只需使用一个文件指针。在读取文件之前,请先查看文件的开头。然后fseek返回末尾写入它(尽管文件指针在末尾,但可能需要fseek)。编辑:从c99标准“[更新模式]输出后不得直接输入,无需对fflush功能或文件定位功能(fseek、fsetpos或rewind)进行中间调用,并且在没有对文件定位函数进行中间调用的情况下,输入不得直接跟在输出后面,除非输入操作在语句ftell()处遇到“文件结束”,否则“文件指针”位于文件的结尾。所以一个fread()将试图读取超过文件末尾的内容,所以很自然,fread()会失败,返回EOF。复制文件描述符指针不会创建对文件的第二次访问,它只创建指针的副本。您可以使用模式“a”调用fopen来设置fp_write指针。当需要命令行参数(在本例中为文件名)时,请始终首先检查argc以确保此类参数存在。如果该语言不存在,则输出“用法”消息并退出程序。您应该标记该语言(而不是将其放在标题中)。它可以帮助人们找到它,还可以改变代码语法的工作方式。只需使用一个文件指针。在读取文件之前,请先查看文件的开头。然后fseek返回末尾写入它(尽管文件指针在末尾,但可能需要fseek)。编辑:从c99标准“[更新模式]输出后不得直接输入,无需对fflush功能或文件定位功能(fseek、fsetpos或rewind)进行中间调用,并且在没有对文件定位函数进行中间调用的情况下,输入不得直接跟在输出后面,除非输入操作在语句ftell()处遇到“文件结束”