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 に答える