从txt文件中查找附加文本

时间:2009-07-27 10:14:07

标签: c#

我想以某种方式编写代码,如果有一个文本文件放在指定的路径中,其中一个用户编辑了文件并输入了新文本并保存了它。现在,我想得到的文本是上次附加。 这里有附加文本之前和之后的文件大小

我的文本文件大小是1204kb,我需要单独结束200kb文本才有可能

7 个答案:

答案 0 :(得分:4)

只有在您实时监控文件大小时才能执行此操作,因为文件不会保留自己的历史记录。

如果文件被修改是可能的,你可以使用FileSystemWatcher并在任何修改时计算文件大小的增加。然后,您可以读取自文件上次更改后附加的字节,这将非常简单。

答案 1 :(得分:2)

在用户添加文本之前,您知道文件有多大吗?如果没有,就没有办法告诉......文件没有维护修订历史记录(在大多数文件系统中,无论如何)。

答案 2 :(得分:1)

由于@Jon Skeethis answer中提到,唯一能够具体说明“附加”文本的方法是通过了解文件在更改之前的大小。其余的字符就是“附加”的内容。

请注意,我引用了上面的内容,因为我从你的问题中得到了两个相互矛盾的含义;编辑和追加。

如果用户只附加文本,这意味着“仅在末尾添加更多文本”,那么理论上应该使用先前大小的方法。

但是,如果用户可以自由地编辑文本,通过在随机位置添加文本,甚至可能删除或更改现有文本,那么您需要一个完整的方法。

如果是后者,我可能会有一些你可以使用的东西,一个二进制补丁实现,也可以用来从同一个文件的旧版本中找出更新版本中更改的内容。它不容易使用,并且可能无法准确地提供您想要的内容,但正如我所说,很难确切地说出您的问题是什么。

答案 3 :(得分:1)

您可以跟踪文件指针。例如,如果您使用的是C语言,则可以使用fseek(fp,SEEK_END)转到文件的末尾,然后使用ftell(fp),它将为您提供文件指针的当前位置。在用户编辑并保存文件后,当您重新运行代码时,可以使用新位置原始位置进行检查。如果新位置大于原始位置,则用文件指针

偏移这些字节数

答案 4 :(得分:0)

如果您的程序一直在运行,您可以在内存中获取该文件的副本。然后在一个单独的线程中定期读取新文件并比较两者。

答案 5 :(得分: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);
    }

答案 6 :(得分:0)

最佳解决方案imo是编写一个小应用程序,必须用它来更改有问题的文件。然后,此应用程序可以在文件中插入其他信息,以便您保留整个修订历史记录。