我正在开发一个跟踪和使用存储在文件系统中的文件的应用程序。允许用户在文件系统中打开,创建,删除和移动文件。同时我的应用程序不会一直运行,因此我无法实时跟踪所有更改。之后我的应用程序必须找出哪个文件是谁(在我的应用程序中确定的i.c.)。
用户最喜欢的解决方案是应用程序本身解决每个更改。每个用户交互都不太受欢迎。
我的一个想法是使用文件的属性并为其分配键值,因此当它被识别一次时,它总是可以在之后被识别。但我不知道是否有这样的属性。本文没有给出太多希望:There is in Windows file systems a pre computed hash for each file?。
有人知道我是否可以使用这样的属性?我怎样才能在C#中使用它?
是否有人遇到此问题?你是怎么解决的?
我想听听好的建议。
问候,Jaap
答案 0 :(得分: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 Change Journal,您可以非常有效地“获得”在指定时间段内更改的所有文件(甚至所有更改事件)。
然而,如果您的文件离开NTFS领域,例如如果它被复制到FAT32,则ADS的内容将丢失。
答案 1 :(得分:1)
依赖于File属性是“危险的”,因为某些用户可能在程序未运行时更改属性。这可能会让您相信程序跟踪某个文件(或不跟踪),而实际上并非如此。
我建议跟踪数据库,XML或其他文件中的文件。当您的应用程序启动时,您将读取文件/ db并检查新/已删除/已编辑的文件。
您可以存储文件的哈希值,以确定文件是否已被移动/编辑。跟踪移动和编辑的文件将非常困难。 (我不知道你怎么能实现它)
PS:您是否考虑过将您的应用程序作为Windows服务?无论应用程序的GUI部分是否正在运行,文件管理都在后台运行?