0

编辑:这似乎只适用于 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。

4

1 回答 1

0

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

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

于 2013-06-20T14:51:15.913 回答