读取并附加到同一文件

用户名

我是C语言编程的新手,只是编写一个简单的程序来读取文本文件中的所有行,并用一个新的数字替换每个数字。这是我的代码。它会打印到控制台的每一行,但不会打印到文件。有人可以建议我的代码有什么问题吗?

#include <stdio.h>
int main(int argc, char *argv[])
{
    FILE * file_ptr;
    int num; 
    char line[128];
    file_ptr = fopen (argv[1], "a+");
    if(file_ptr==NULL)
    {
        printf("Error opening file");
    }

    if(file_ptr!=NULL)
    {
        while(fgets(line,128,file_ptr)!=NULL)   
        {
            fputs("df",file_ptr);   
            printf("2");
        }
    }

    fclose(file_ptr);
    return(0);
}
吉勒斯“别再邪恶了”

问题是您正在从同一文件读取和写入,并且读取和写入会交互。

a+(添加,允许读取)模式打开文件会将文件位置设置在文件的开头,因此第一次调用将fgets读取第一行。但是在追加模式下,所有写操作均在文件末尾执行。因此,第一个调用fputs将文件位置设置为文件末尾,然后写入df由于在读取和写入操作中只有一个文件位置,因此对文件的下一个调用将fgets在文件末尾执行,并且不读取任何内容。

文件位置的行为使该模式最a+适合您要读取文件的当前全部内容,然后在末尾添加内容的情况。

请注意,修改文件中间内容的唯一方法是用相同长度的字节序列替换字节序列。因此,您可以替换12df,但不能替换123df:如果将文件位置设置在要写入的位置123并进行写操作df,最终将得到df3要用长度可能不同的字符串替换数字,您需要整体重写文件

当您要完全修改文件时,有三种主要技术:

  • 将当前内容加载到内存中,将文件截断为0,然后写入新内容。
  • 打开当前文件进行读取,创建一个新文件,将新内容写入新文件,关闭旧文件,然后移动(重命名)新文件以覆盖旧文件。
  • 重命名旧文件,使用原始名称创建新文件,从重命名文件中读取当前内容,写入新内容并关闭文件。

第一种方法有一个主要缺点:如果程序崩溃或计算机断电,文件将丢失。因此,您几乎应该始终使用其他两种方法之一:它们使用更多的磁盘空间,但是增加安全性几乎总是值得的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

多个`FILE`附加到同一文件

从文件读取后写回同一文件

读取并附加到同一文本文件

多次读取同一文件的Python

读取和写入同一文件fstream

如何逐行比较单个文件中的行并将输出附加到同一文件

从与.jar文件位于同一文件夹中的文件读取

正在读取同一文件夹中的文件-改进了吗?

是否可以从存在Azure功能的同一文件夹中读取文件

可以使用同一文件对象多次读取文件吗?

如何逐行读取文件,消除重复,然后写回同一文件?

线程1从文件读取,而线程2写入同一文件

使用nodeJS将文件添加到同一文件夹

从文件中复制纯文本行,并将其附加到带有中线前缀的同一文件中,或删除中线前缀

读取和写入同一文件-输出格式更改

在Java中读取和写入同一文件

从Excel模板读取数据并写入同一文件

如何使用spark(scala)读取和写入(更新)同一文件

如何在Java中两次读取同一文件?

多个Java进程可以同时读取同一文件吗?

如何异步写入和读取节点中的同一文件?

更改Assetic的输出不会使其从同一文件夹中读取

如何从Flyway中的同一文件夹读取Java和SQL迁移

在Java中同时读取和写入同一文件

使用try-with-resources读取和写入同一文件

Java多个对象读取同一文件的不同部分

使用C ++同时读取和写入同一文件

从 PowerShell 中的 Invoke-RestMethod 同时读取和写入同一文件

Node.js同时读取流并将其写入同一文件