File io 在达到EOF一次后,如何从文件中连续读取附加数据?(Mac OS 10.8)

File io 在达到EOF一次后,如何从文件中连续读取附加数据?(Mac OS 10.8),file-io,d,File Io,D,编辑:这似乎只适用于Mac OS。Ubuntu工作正常。 我有一个简单的问题,我想打开一个文件并从中读取数据。当文件更改时,我将读取更多数据。问题是我只想打开这个文件一次 import std.c.stdio; import core.thread; void main(string[] args) { char[1024] buffer; FILE* file = fopen("text.txt", "r"); printf("First Read:\n");

编辑:这似乎只适用于Mac OS。Ubuntu工作正常。

我有一个简单的问题,我想打开一个文件并从中读取数据。当文件更改时,我将读取更多数据。问题是我只想打开这个文件一次

import std.c.stdio;
import core.thread;

void main(string[] args)
{
    char[1024] buffer;

    FILE* file = fopen("text.txt", "r");

    printf("First Read:\n");

    while(fgets(buffer.ptr, buffer.length, file) !is null)
    {
        printf("%s", buffer.ptr);
    }

    clearerr(file);

    Thread.sleep(dur!("seconds")(5));

    printf("Second Read:\n");

    while(fgets(buffer.ptr, buffer.length, file) !is null)
    {
        printf("%s", buffer.ptr);
    }

    fclose(file);
}
我读了文件,然后当文件暂停时,我向打开的文件添加新行。当程序恢复时,它完全忽略新行。啊

我想这是缓冲的结果,所以我尝试了各种方法来避免这种行为,包括:

clearerr()
fseek()
fflush()
似乎什么都不管用。我错过了什么?一定很简单。有什么想法吗


我主要使用Linux/Mac OS。

使用ftell()跟踪上次读取文件的位置。在EOF时,倒带(), 请稍等片刻,将fseek()设置为记录的文件中的最后一个偏移量,然后尝试读取操作。如果是EOF,倒带(),否则读取新行


旁白:没有读过你的评论的人会因为你的“C代码”有问题而责备你。如果你知道C,你可能会想修复它。或者在顶部加上一个粗体的免责声明。

我将其标记为C,因为上面发布的代码几乎是90%C,熟悉C的人将能够回答这个问题。