2009-07-27 49 views
1

我想以某种方式编写代码,如果某个文本文件放置在指定路径中,则其中一个用户编辑了该文件并输入了新文本并将其保存。现在,我想要获取上次附加的文本。 两个文本从txt文件中查找附加文本

我的文本文件大小之前和追加后我在这里有文件大小为1204kb,从我需要采取单独200KB文字的末尾,才有可能

+0

我的文本文件大小是1204kb,因为我需要单独采取200kb文本的结束是可能的。 – 2009-07-27 10:40:39

回答

1

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

2

你知道有多大的文件在用户添加文本之前?如果没有,则无法告诉......文件不会保留修订历史记录(无论如何,在大多数文件系统中)。

4

这只能在您实时监控文件大小时才能完成,因为文件不会保留自己的历史记录。

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

1

由于@Jon Skeethis answer中暗示,唯一能够明确告诉被“附加”的文本的方法是知道该文件在更改之前有多大。其余的角色因此被“附加”。

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

如果用户只追加文本,意思是“只在最后添加更多文本”,那么先前的尺寸方法应该在理论上起作用。然而,如果用户自由地编辑文本,通过在随机点添加文本,甚至删除或改变现有文本,那么您需要一个完整的'其他方法来解决这个问题。

如果是后者,我可能会有一些可以使用的东西,一个二进制修补实现,也可用于从相同文件的较旧副本中找出在较新副本中更改了哪些东西。使用起来并不容易,并且可能不会完全给你想要的东西,但正如我所说的,很难确切地说出你的问题是什么。

0

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

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是编写一个必须用于更改相关文件的小应用程序。然后,该应用程序可以在文件中插入附加信息,以便保留整个修订历史记录。