在达到EOF一次后如何连续读取文件中的数据? (Mac OS 10.8)

时间:2013-06-20 14:40:02

标签: 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");

    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。

1 个答案:

答案 0 :(得分:0)

使用ftell()跟踪您上次读取文件的位置。在EOF,rewind(), 等一会儿,fseek()到你录制的文件中的最后一个偏移量并尝试读取操作。如果EOF,则倒带(),否则读取新行。

PS:有人没有看过你的评论会告诉你有问题的“C代码”。如果你知道C.你可能想要解决它。或者在顶部放置一个BOLDED免责声明。