2009-07-27 8 views
1

Ich möchte einen Code auf eine Weise schreiben, wenn es eine Textdatei in einem angegebenen Pfad befindet, einer der Benutzer die Datei bearbeitet und neuen Text eingegeben und gespeichert.Wenn ich will um den Text zu erhalten, der zuletzt angehängt wurde. hier ist mit Dateigröße für sowohl vor als auch nach dem Anfügen des TextFinden Sie angehängten Text aus der TXT-Datei

meine Textdatei Größe ist 1204kb aus, dass ich brauche, allein das Ende 200kb Text zu nehmen ist es möglich,

+0

meine Textdateigröße ist 1204kb davon, dass ich das Ende von 200kb Text allein nehmen muss, ist es möglich. –

Antwort

1

Sie den Überblick über die Dateizeiger halten. Wenn Sie z. B. die Sprache C verwenden, können Sie mit fseek (fp, SEEK_END) bis zum Ende der Datei gehen und dann mit ftell (fp) die aktuelle Position des Dateizeigers angeben. Nachdem der Benutzer die Datei bearbeitet und gespeichert hat, können Sie bei der erneuten Ausführung des Codes die ursprüngliche Position der neuen Position überprüfen. Wenn die neue Position größer als die ursprüngliche Position ist, versetzen Sie diese Anzahl Bytes mit dem Dateizeiger

2

Wissen Sie, wie groß die Datei war bevor der Benutzer den Text angehängt hat? Wenn nicht, gibt es keine Möglichkeit zu sagen ... Dateien führen keinen Revisionshistory (in den meisten Dateisystemen sowieso).

4

Dies kann nur durchgeführt werden, wenn Sie die Dateigröße in Echtzeit überwachen, da Dateien ihre eigenen Historien nicht beibehalten.

Wenn Sie die Dateien beobachten, wie sie geändert werden, können Sie vielleicht eine FileSystemWatcher verwenden und die Zunahme der Dateigröße bei jeder Änderung berechnen. Sie könnten dann die angehängten Bytes lesen, da sich die Datei zuletzt geändert hat, was sehr einfach wäre.

1

Wie in @Jon Skeet auf his answer verweist, ist die einzige Möglichkeit, spezifisch zu sagen, welcher Text "angehängt" wurde, indem man weiß, wie groß die Datei war, bevor sie geändert wurde. Der Rest der Zeichen ist also was "angehängt" wurde.

Beachten Sie, dass ich oben angefügt zitiere, da ich zwei widersprüchliche Bedeutungen von Ihrer Frage bekommen; bearbeitet und angehängt.

Wenn der Benutzer nur Text anfügt, der "nur am Ende mehr Text hinzufügen" bedeutet, sollte theoretisch der Ansatz der vorherigen Größe funktionieren.

Wenn jedoch der Benutzer den Text frei bearbeitet, indem er Text an zufälligen Stellen hinzufügt und vielleicht sogar vorhandenen Text entfernt oder ändert, dann brauchen Sie einen ganz anderen Ansatz.

Wenn es das letztere ist, könnte ich etwas haben, das Sie verwenden könnten, eine binäre Patch-Implementierung, die auch verwendet werden kann, um aus einer älteren Kopie derselben Datei herauszufinden, was in einer neueren Kopie geändert wurde. Es ist nicht einfach zu benutzen und gibt dir vielleicht nicht genau, was du willst, aber wie gesagt, es ist schwer genau zu sagen, was deine Frage ist.

0

Wenn Ihr Programm die ganze Zeit läuft, können Sie eine Kopie der Datei im Speicher abrufen. Dann in einem separaten Thread regelmäßig die neue Datei lesen und vergleichen Sie die beiden.

0

Wenn Sie möchten, dass Ihr Programm benachrichtigt wird, wenn die Datei geändert wird, verwenden Sie FileSystemWatcher. Sie werden jedoch nur benachrichtigt, wenn sich die Datei während der Ausführung des Programms ändert und Ihnen kein angehängter Text zur Verfügung gestellt wird. Sie erhalten nur Informationen darüber, welche Datei geändert wurde.

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

Oder:

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

Beste Lösung imo ist es, eine kleine App zu schreiben, die verwendet werden muss, um die betreffende Datei zu ändern.Diese Anwendung kann dann zusätzliche Informationen in die Datei einfügen, mit denen Sie den gesamten Revisionshistory behalten können.

Verwandte Themen