【问题标题】:How to start file writing from beginning after adding few lines In C or shell script在 C 或 shell 脚本中添加几行后如何从头开始写入文件
【发布时间】:2021-05-22 21:12:21
【问题描述】:

我目前正在尝试解决一个问题。我想在一个 txt 文件中添加几行。比方说20行。并且我正在检查添加了多少行,一旦达到 20 行,然后再次开始从文件开头添加行。表示要重置文件指针并从第一行开始覆盖。

我使用 echo 命令在文件中添加行,它始终保持附加文件。但它不会重置文件指针。

我也尝试以附加模式打开文件,但它不允许在文件开头重置文件指针。

W+ 和 r+ 模式对我也没有用。有人可以建议我解决这个问题吗?我主要使用 C 语言或 shell 脚本。

【问题讨论】:

  • 你试过rewind吗?
  • 是的,我试过倒带,但在附加模式下,这不起作用..
  • 对我来说工作得很好,可以发布代码示例和您正在试验的文本文件吗?
  • @KeyPare - 如果在附加模式下不起作用,请不要使用附加模式。 W+ 和 r+ 模式也没有用是一种误解。您是否知道线条必须具有相同的长度才能使您的计划工作?您如何检查添加了多少行

标签: c shell


【解决方案1】:

您是否尝试将 fseek 与 SEEK_SET 结合使用? https://www.tutorialspoint.com/c_standard_library/c_function_fseek.html

【讨论】:

    【解决方案2】:

    shell 脚本: 如果您使用 linux,请使用命令 sed。 您可以删除或替换第一行,第二行,第四行,还有什么。功能强大!

    使用命令wc -l 显示你有多少行。

    c 代码 使用 fseek 这就是你要找的。​​p>

    找到您最喜欢的解决方案,玩得开心。

    我的代码显示它适用于 fseek

    #include <stdio.h>
    
    void writeToFile(FILE*, char*);
    
    int main(void)
    {
        /* Mode: w or w+ //Content of file will be gone! */
        long pos;
        FILE* fhwrite = fopen("Lines.txt","w");
        writeToFile(fhwrite,"I'M 1.st line\n");
        writeToFile(fhwrite,"I'M 2.nd line\n");
        writeToFile(fhwrite,"I'M 3.rd line\n");
        
        /* Position of line 4 */
        pos = ftell(fhwrite);
        writeToFile(fhwrite,"I'M 4.th line\n");
        
        writeToFile(fhwrite,"I'M 5.th line\n");
    
        fseek(fhwrite,pos,SEEK_SET);
        /*
            Windows: \r\n | 2 Bytes more for replace
            Linux: \n     | 1 Byte more for replace
        */
        writeToFile(fhwrite,"REWRITE  LINE  4\n");
        fclose(fhwrite);
    }
    
    void writeToFile(FILE* fh, char* putTextToFile)
    {
        printf("Current position: %ld\n", ftell(fh));
        fprintf(fh, "%s", putTextToFile);
    }
    

    结论 |结果:

    您必须阅读整个文件,替换特定行。 完成的所有更改都可以写回文件。

    我认为 bash 脚本对您的操作来说更容易(如果是 LINUX)^^。

    【讨论】:

    • 但是如果我以附加模式打开文件,fseek 不会将文件指针重置为文件开头...
    • 另外,一旦我在文件中添加几行,我想从文件顶部开始。因此,每次代码运行时,它都应该从上次离开的地方继续添加。例如:- 它添加了 20 行,如果我再次运行代码,它将检查已经 20 行,然后从第一行开始添加并继续移动......
    • @KeyPare 您必须逐行读取文件。如果没有达到 20 行,则检查数组,然后将其附加到数组并将其写入文件中。我的示例代码仅有效,因为它逐行编写第一行。如果我们重新打开它 - 程序忘记了所有操作。请记住这一点。祝你今天过得愉快。 ^^
    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 2019-11-12
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多