c - 同时写入和读取文件

标签 c file readfile writefile

我一直在尝试同时读取和写入一个文件,并且我正在尝试将 text.txt 内容中的所有制表符替换为空格。这是我的代码:

int main()
{
   FILE* filePtr = fopen("text.txt", "w+");

   char c;
   c = fgetc(filePtr);
   fpos_t num;
   while(c != EOF)
   {
       if(c == '\t')
       {
           fgetpos(filePtr, &num);
           num--;
           fsetpos(filePtr, &num);
           fputc(' ', filePtr);
       }
       c = fgetc(filePtr);
   }
}

text.txt的内容是这样的:

嗨\t 我的\t 名字\t 是\t jack !

当我运行这段代码时,我在 text.txt 文件中的输出只是空白。那里没有字符。我应该怎么做才能使替换按预期进行?

最佳答案

您的代码存在三个主要问题:

  1. "w+" 模式打开文件 截断 文件(删除所有内容)。您可以对其进行读取和写入,但原始内容会丢失。模式 "r+" 将在不更改内容的情况下打开它进行读写,文件位置最初位于文件的开头。

  2. fpos_t 类型的值进行算术运算是不安全的。反正没必要;有一种更简单的方法可以将文件位置移动相对数量。

  3. 完成后不要关闭文件。

你的代码的这个变体对我有用:

#include <stdio.h>

int main(void)
{
   FILE* filePtr = fopen("text.txt", "r+");
   char c;

   while((c = fgetc(filePtr)) != EOF)
   {
       if(c == '\t')
       {
           fseek(filePtr, -1, SEEK_CUR);
           fputc(' ', filePtr);
       }
   }
   fclose(filePtr);
   return 0;
}

关于c - 同时写入和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677577/

相关文章:

java - 快速搜索不断增长的大型平面文件的最佳方法是什么?

c++ - 如何在c++中从具有不同行大小的文件中读取行?

c - 我不明白这个用指针编写的 C 程序

java - 在方法参数中指定文件类型

java - 使用 Java 加密敏感应用程序数据

PHP readfile 添加内容长度到输出

java - 如何使用groovy读取文件并将其内容存储为变量?

c - 如何获取窗口的CREATESTRUCT?

c - gcc 警告传递 'alt_16550_fifo_write' 的参数 2 使指针来自整数而不进行强制转换

c - C 存储变量的高级内存管理