C# 确定文件中更改的字节的开始和结束范围
我正在开发一个小型实验性实用程序,在我们公司内部使用,它为存储在定制CRM软件中的注释编制索引,用于全文搜索。这些注释存储在Btrieve数据库(一个名为notes.DAT的文件)中。可以连接到数据库并检索注释,以便使用普适的ADO.NET提供程序编制索引。但是,索引器当前循环遍历每个注释,并每5分钟对其重新编制索引。这似乎效率极低 不幸的是,我们的CRM软件无法向索引服务发出通知,说明已更改,因为数据库可能存在于远程计算机上(而且开发人员不会编写通过网络与我的服务通信的过程,因为这只是一个爱好项目) 与其放弃,我想借此机会进一步了解一下原始Btrieve数据库。所以,这是我的计划 NOTES.DAT文件必须共享,因为我们的CRM软件使用Btrieve API而不是ODBC驱动程序(这意味着客户端安装必须能够在网络上看到文件本身)。我想监视这个文件(使用FileSystemWatcher之类的工具),然后确定更改的字节。使用这些信息,我将尝试计算该位置的记录并获取其主键。然后,索引器将使用普适的ADO.NET提供程序仅更新该记录 问题(除了我还不太了解Btrieve文件的结构或者是否可以从原始数据确定主键之外)是我不知道如何确定NOTES.DAT中更改的字节的开始和结束范围 我可以区分两个版本,但这意味着将NOTES.DAT的副本存储在某个地方(它可能非常大,因此需要全文索引服务) 最有效的方法是什么 谢谢C# 确定文件中更改的字节的开始和结束范围,c#,diff,postgresql,pervasive,btrieve,C#,Diff,Postgresql,Pervasive,Btrieve,我正在开发一个小型实验性实用程序,在我们公司内部使用,它为存储在定制CRM软件中的注释编制索引,用于全文搜索。这些注释存储在Btrieve数据库(一个名为notes.DAT的文件)中。可以连接到数据库并检索注释,以便使用普适的ADO.NET提供程序编制索引。但是,索引器当前循环遍历每个注释,并每5分钟对其重新编制索引。这似乎效率极低 不幸的是,我们的CRM软件无法向索引服务发出通知,说明已更改,因为数据库可能存在于远程计算机上(而且开发人员不会编写通过网络与我的服务通信的过程,因为这只是一个爱好
编辑:在一个事务中可以添加、编辑或删除多个注释,因此如果可能,该方法需要能够确定多个单独的字节范围。如果您的
NOTES.DAT
文件存储在上,则您应该能够执行以下操作之一:
- 使用来标识您的文件(首选)
- 使用通过VSS(非常快)定期拍摄快照来跟踪对文件的更改,然后:
ing版本diff
和N
(可能没有重新编制索引那么慢,但仍然很慢),或N-1
- 深入研究并尝试执行
的diff
,以确定感兴趣的文件在哪个偏移处更改了哪些块(要复杂得多,但也要快得多-但仍然不如使用USN日志那么快、可靠和简单)$Mft
使用USN日志应该是您的首选方法。您可以使用该实用程序创建和截断USN日志。Hahaha,注释消失的奇怪案例。=)无论如何,我不是一个Windows的人,但从我所看到的,FileSystemWatcher不会帮助你。您可能需要使用较低级别的API.Correct。我想FileSystemWatcher不会告诉我哪些字节已更改,但我希望它至少能在文件更改时通知我。我只需要知道在接到通知后该怎么办。希望Windows专家(Skeet?)能帮助您。OTOH,如果将文件保存在Linux机器上(可能通过SAMBA共享)是一种选择,inotify可能会做到这一点。