【问题标题】:C programming Im trying to switch content from 2 txt filesC 编程我试图从 2 个 txt 文件中切换内容
【发布时间】:2018-11-05 16:56:02
【问题描述】:

我正在尝试切换 2 个 txt 文件的内容,它们只有带有字符的行。

我尝试这样做,程序编译但不修改文本文件中的任何内容。有没有其他方法可以做到这一点?

FILE *f, *p;
char linha[TAM], linha2[TAM];

f =fopen("texto.txt", "r");

if(f==NULL)
{
    printf("Erro ao abrir ficheiro");
    fclose(f);
    return;
}

p =fopen("texto2.txt", "r");

if(p==NULL)
{
    printf("Erro ao abrir ficheiro");
    fclose(p);
    return;
}


while( fgets(linha,TAM,f) != NULL || fgets(linha2,TAM,p) != NULL )
{
    if(strcmp(linha, "") != 0)
    {
        fprintf(p, "%s", linha);
    }

    if(strcmp(linha2, "") != 0)
    {
        fprintf(f, "%s", linha2);
    }
}

fclose(f);
fclose(p);


return 0;

}

【问题讨论】:

  • txt 文件已经创建,我尝试切换到 "w" 进行检查,该操作清空了 txt 文件

标签: c file input output


【解决方案1】:

正如@PaulStelian 所暗示的,直接交换是有问题的。以交换两个变量为例:要使其工作,您必须将一个变量的数据临时存储在某个地方。 (或者使用 XOR 交换,这很不错,但很笨拙,适用于二进制数据。)

你最好的选择可能是复制一个文件,然后像这样交换

duplicateFile = copy(file1);
file1 = file2;
file2 = duplicateFile;

对于fopen,使用r+ 选项打开文件以进行读写。 r 只是打开阅读。

来自man fopen

r 打开文本文件进行阅读。流位于 这 文件的开头。

r+ 可读写。流位于 文件的开头。

【讨论】:

  • 还是会比较麻烦;在记录具有可变大小(文本文件通常具有可变大小的行)的文件中同时进行读取和写入是灾难的根源。
  • 最初的目标需要使用“r+”选项并以其他方式完全重写。不求回首行被替换?读取任意长度的块?
  • 好吧,那我想最好的选择是先使用一个临时的txt文件来保存其中一个,对吧?
  • 我同意同时读写是有问题的,但是通过临时交换?对于一般情况,这听起来效率很低。对于小文件,好吧,这很简单,但对于较大的文件,我真的不会这样做。
  • @PaulStelian 查了一下,C99 有rename,见man 2 rename。 POSIX 将此扩展到其他文件类型而不是常规文件类型,请参阅man 3 rename
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2020-10-16
  • 2018-01-14
相关资源
最近更新 更多