Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件夹当前状态与保存的先前状态(C#)进行比较_C#_Visual Studio_Winforms_Comparison - Fatal编程技术网

将文件夹当前状态与保存的先前状态(C#)进行比较

将文件夹当前状态与保存的先前状态(C#)进行比较,c#,visual-studio,winforms,comparison,C#,Visual Studio,Winforms,Comparison,我想制作一个winform应用程序,每当您打开它时,它会告诉您自上次打开以来所做的所有更改,并且可能会记录一个日志,例如: 文件/文件夹创建 文件/文件夹重命名 文件/文件夹排除 我想我必须完成四项任务: 将文件夹状态(树)保存到 可重新加载格式 加载此信息 将此信息与当前数据进行比较 国家根据需要召集 列出更改,记录并显示它们 我想出了一些主意,你有什么可以帮我的 (我是VS08和.NET3.5) ---[编辑]-- 重命名应该是不可能的,它可能只是一个排除和创建,因为文件夹在Wind

我想制作一个winform应用程序,每当您打开它时,它会告诉您自上次打开以来所做的所有更改,并且可能会记录一个日志,例如:

  • 文件/文件夹创建
  • 文件/文件夹重命名
  • 文件/文件夹排除
我想我必须完成四项任务:

  • 将文件夹状态(树)保存到 可重新加载格式
  • 加载此信息
  • 将此信息与当前数据进行比较 国家根据需要召集
  • 列出更改,记录并显示它们
我想出了一些主意,你有什么可以帮我的

(我是VS08和.NET3.5)

---[编辑]--
重命名应该是不可能的,它可能只是一个排除和创建,因为文件夹在Windows中没有唯一的ID

---[编辑]--
它的真正目的是学习,如果它有效,我也可以使用它并处理源代码或其他东西,很抱歉之前没有提到这一点,我对现成的解决方案不感兴趣。
我想观看一个网络共享文件夹,其中我已经有一个当前正在使用的应用程序(我制作的),该应用程序有一个FileSystemWathcer,每当任何文件或任何文件夹/子文件夹中发生任何事情时,都会在托盘中弹出一个消息气球。

我想要的是能够在一个单独的应用程序(最初)中比较先前的状态和当前状态,如果成功,则在当前运行的应用程序中实现它。但这与问题无关。

这是一个好办法

另一个想法是使用NTFS更改日志,如和中所述。应用程序的第一次运行必须为所需的卷启用日志,这样就完成了。后续运行读取日志并提取感兴趣目录的更改信息


请注意,这比听起来要困难,因为API的级别相当低。还有一个很小的风险,就是有人在运行之间关闭日志。

我的建议是将状态序列化为XML文件。利用xmldiff创建diffgram并从生成的diffgram中提取信息以供显示。如果您有正确的嵌套结构,diffgram将进行元素匹配,它将为您节省大量的时间来编写自己的文件夹比较和递归子文件夹比较。你所需要做的就是找出如何消化产生的diffgram,这通常是非常直接的。每个元素通常都标有属性,表示它已被更改、添加或删除。

这样的应用程序已经存在。它被称为,而且还有一个非常好的Windows客户端,名为

如果你需要知道你的程序需要什么样的功能,或者不知道UI应该如何设计,那么看看他们的文档(,)甚至是

更新
因此,如果您只是想自己完成这项工作以进行培训,您还应该查看文档或源代码,了解他们是如何完成这项任务的(例如,创建一个保存旧状态的隐藏子文件夹),了解如何自己解决这一问题。

这样做是否过火了?从这个问题看来,应用程序只对元数据信息感兴趣,比如更改日期和所做的更改。如果您将VCS放在PC上的整个文件系统上,这是无效的。然后,您可以对每个更改执行签入签出操作。为所有内容更改而存储的差异图也与用户无关(根据我对该问题的理解),是的,从当前已知的需求来看,这可能是一种过激行为。但也许这些只是一个起点,解决所有问题的圣杯就是使用存储库。但这是OP必须做出的决定。他也没有写任何他想在pc上观看整个文件系统的东西。这是你刚才做的假设。