编辑:这似乎只适用于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。
答案 0 :(得分:0)
使用ftell()跟踪您上次读取文件的位置。在EOF,rewind(), 等一会儿,fseek()到你录制的文件中的最后一个偏移量并尝试读取操作。如果EOF,则倒带(),否则读取新行。
PS:有人没有看过你的评论会告诉你有问题的“C代码”。如果你知道C.你可能想要解决它。或者在顶部放置一个BOLDED免责声明。