2009-07-27 20 views
1

特定のパスにテキストファイルがある場合、ユーザーがそのファイルを編集して新しいテキストを入力して保存しました。前回追加されたテキストを取得します。 がここの両方の前に、ファイルサイズを持っていますし、後に、私は一人で200キロバイトのテキストの最後を取る必要があることからtxtファイルから追加テキストを検索

私のテキストファイルのサイズが1204キロバイトでテキストを追加ことが可能

+0

私のテキストファイルのサイズは1204kbですから、私は200kbのテキストを単独で使用する必要があります。 –

答えて

1

あなたはファイルポインタを追跡することができます。例えば、C言語を使用している場合は、fseek(fp、SEEK_END)を使ってファイルの最後に移動し、ファイルポインタの現在位置を示すftell(fp)を使用することができます。ユーザーがファイルを編集して保存した後、コードを再実行すると、新しい位置の元の位置で確認できます。新しい位置が元の位置よりも大きい場合は、ファイルポインタを使用してそれらのバイト数をオフセットします。

2

であるあなたはどのように大きなファイルを知っていますかユーザーがテキストを追加する前ですか?もしそうでなければ、ファイルには改訂履歴は保持されません(とにかくほとんどのファイルシステムで)。

4

これは、ファイルが独自の履歴を保持しないため、リアルタイムでファイルサイズを監視している場合にのみ実行できます。

修正されたファイルを見ている可能性がある場合は、おそらくFileSystemWatcherを使用して、変更したファイルサイズの増加を計算することができます。ファイルが最後に変更されてから追加されたバイトを読み取ることができます。これは非常に簡単です。

1

@Jon Skeetには、his answerが含まれていますが、「追加された」テキストを具体的に伝える唯一の方法は、変更前のファイルのサイズを知ることです。残りの文字は「追加された」ものです。

私はあなたの質問から2つの矛盾する意味を得るので、私は上に追加しました。編集して追加しました。

ユーザーが「最後にテキストのみを追加する」という意味のテキストを追加する場合は、以前のサイズのアプローチが理論上有効である必要があります。

しかし、ユーザーが自由にテキストを編集したり、ランダムな場所にテキストを追加したり、既存のテキストを削除したり変更したりする場合は、これに全面的にアプローチする必要があります。

後者の場合、同じファイルの古いコピーから新しいコピーで変更されたものを把握するためにも使用できる、バイナリのパッチ適用を使用できます。使用するのは簡単ではなく、あなたが望むものを正確に与えるわけではありませんが、私が言ったように、あなたの質問が何であるかを正確に伝えるのは難しいです。

0

プログラムが実行中の場合、メモリ内のファイルのコピーを取得できます。その後、別のスレッドで定期的に新しいファイルを読み込み、2つのファイルを比較します。

0

ファイルが変更されたときにプログラムに通知する場合は、FileSystemWatcherを使用します。ただし、プログラムの実行中にファイルが変更されたときに通知するだけで、追加テキストは表示されません。変更されたファイルに関する情報のみが表示されます。

 FileSystemWatcher watcher = new FileSystemWatcher(Environment.CurrentDirectory, "test.txt"); 
    while (true) 
    { 
     var changedResult = 
      watcher.WaitForChanged(WatcherChangeTypes.Changed); 
     Console.WriteLine(changedResult.Name); 
    } 

または:

FileSystemWatcher watcher = new FileSystemWatcher(Environment.CurrentDirectory, "test.txt"); 
    watcher.Changed += watcher_Changed; 
    static void watcher_Changed(object sender, FileSystemEventArgs e) 
    { 
     Console.WriteLine(e.FullPath); 
     Console.WriteLine(e.ChangeType); 
    } 
0

ベストソリューションimoは問題のファイルを変更するために使用する小さなアプリケーションを作成することです。このアプリケーションは、追加情報をファイルに挿入して、リビジョン履歴全体を保持することができます。

関連する問題