0

我正在开发一个跟踪和使用存储在文件系统上的文件的应用程序。允许用户打开、创建、删除和移动文件系统中的文件。同时,我的应用程序并非一直在运行,因此我无法实时跟踪所有更改。之后我的应用程序必须找出哪个文件是谁(在我的应用程序中标识的 ic)。

用户最喜欢的解决方案是应用程序自己解决每一个变化。每个用户交互都不太受欢迎。

我的一个想法是使用文件的属性并为其分配一个键值,这样当它被识别一次时,以后总是可以识别它。但不知道有没有这样的属性。这篇文章没有给予太大希望:在 Windows 文件系统中,每个文件都有一个预先计算的哈希值吗?.

有人知道我是否可以使用这样的属性吗?以及如何在 C# 中使用它?

有没有人遇到这个问题?你是怎么解决的?

我想听听好的建议。

问候,雅普

4

2 回答 2

2

如果您的文件不离开 NTFS,这很容易通过替代数据流实现,您可以在其中将数据与文件一起存储。这是关于 ADS 或多或少的好文章:http: //www.flexhex.com/docs/articles/alternate-streams.phtml

还有另一种合适的方法——效率很高,但使用起来也很复杂,它需要对 NTFS 内部有很好的了解——USN Change Journal;请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx。使用 USN 更改日志,您可以非常有效地“获取”在指定时间段内更改的所有文件(甚至所有更改事件)。

然而,如果您的文件离开 NTFS 领域,例如,如果它被复制到 FAT32,ADS 的内容就会丢失。

于 2012-08-31T21:17:50.683 回答
1

依赖文件属性是“危险的”,因为某些用户可能会在您的程序未运行时更改该属性。这可能会让您相信某个文件已(或未)被程序跟踪,而实际上并没有。

我建议跟踪数据库、XML 或其他文件中的文件。当您的应用程序启动时,您读取文件/db 并检查新的/删除的/编辑的文件。

您可以存储文件的哈希,以查明文件是否已被移动/编辑。跟踪移动和编辑的文件将非常困难。(我不知道你如何实现它)

PS:您是否考虑过让您的应用程序成为 Windows 服务?无论您的应用程序的 GUI 部分是否正在运行,都让文件管理在后台运行?

于 2012-08-31T14:12:16.887 回答