Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的文件操作_C_File Io - Fatal编程技术网

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 ((

最近,我开始用C语言进行文件操作,并且成功地将一个文件的内容复制到另一个文件

我先从文件的开头读取文件的内容,然后在同一文件的末尾写入相同的内容。(类似于追加)。但我不能这么做

这是我写的代码。 谁能告诉我,我在这里犯了什么错误

#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()处遇到“文件结束”