2

タブ区切りのレコードを CSV ファイルに一貫して書き込むラボ機器があり、そのデータを使用するアプリを作成する任務を負っています。その部分は簡単です。ただし、これに加えて、データバインディングを使用してWPFアプリを介してこのファイルを「リアルタイム」で「監視」する方法を見つけることも任されています。これをより簡単な作業にするために、2 つの利点があります。

  1. CSV に書き込まれるレコードは、8 秒間隔で発生します。

  2. CSV を監視する必要がある合計期間中、ファイル自体が 100 MB を超えることはほとんどありません。私が見たファイルのほとんどは 20 ~ 30 MB です。

私の質問

ファイルを開き、そのコンテンツの「一定の」読み取りまたは監視を維持する方法はありますか、または従来のファイル IO ポーリングを使用してこれを行う必要がありますか?

この問題を解決しようとする私の思考プロセス

修辞的に、私は「この CSV はデータベースとどう違うのですか?」と考えました。しかし、さらなる調査により、EF は CSV を直接操作できないことが明らかになりました。Entity Framework の DbContext をデータ バインディングと共に使用して、プロパティの変更を報告できる場合、CSV の変更を監視するために同様の設定を行うことはできますか? しかし、私が精神的にどの道をたどっても、解決策は常に「ポーリング」に戻ります。たとえば、Linq を使用して CSV を定期的にヒットし、結果をプロパティに返すことができます。プロパティの値が変更された場合 (CSV に何かが追加された場合)、データバインディングはそれを認識し、アプリはそれに応じて動作します。ええ、それはポーリングのように聞こえます。

結論は

WPF/databinding または EF (可能であれば)、または私が考えていない、またはここで言及していない .NET クラスを利用して、質問に答えたり、問題を解決したりするより簡単なソリューションがある場合は、それについて聞いてみたいと思います。

4

1 に答える 1

2

FileSystemWatcher を使用して、ファイルの長さまたは最終変更時刻がいつ変更されたかを検出できますが、指しているディレクトリを読み取ることができない場合、FSW が適切に動作しないという事実を認識している限り (たとえば、共有への接続が中断されるため、回避策があります)。

おそらく、ファイルを開いたままにしないほうがよいでしょう。そうしないと、ライターに干渉する可能性があります。変更が検出されたときに開いて読み取り、閉じることをお勧めします。

EF は、ファイルを直接操作するようには設計されていません。おそらくファイルに基づくデータベースエンジンで動作するように設計されていますが、これはまったく別のことです。幸いなことに、CSV の行を読み取ることはそれほど難しくありません。追加専用であると仮定すると、これまでに読んだ範囲を追跡し、その時点で次の読み取りを開始することも難しい問題ではありません。

于 2013-03-15T16:54:22.280 に答える