在我的程序中,我调用的方法对文件夹的内容进行了大量更改,包括:
deleting files/folders,
changing files/folders,
adding files/folders,
adding/deleting symboliclinks/junctions.
到目前为止,这没问题。但我想出了可选地将文件夹的最终状态(在完成所有操作之后)投影到另一个文件夹的想法,以便原始文件夹保持不变。
仅在应用操作之前复制文件夹是不合适的,因为操作可能会删除大块数据,而这些数据必须事先被不必要地复制。所以我想到,专业程序员肯定不会这样做。
理想情况下,我会写这样的东西(伪代码):
originalFolder.Delete(很多文件).Add(其他一些东西,可能会更改一些权限等).ProjectTo(newFolder)
是否有某种设计模式或其他方式可以达到这样的效果?也许一些虚拟文件系统我可以在将它实现到一个单独的文件夹之前做些什么?
我知道如何编写扩展方法,而且我已经写了很多简单的方法,但我真的需要在如何实现这样的事情上走上正确的道路。
答案 0 :(得分:1)
如果通过您的api完成添加和删除,那么您可以在不触及物理文件的情况下修改内存中的文件列表,并在设置时使用最终文件夹中的副本进行更改。
当然,假设你不需要在任何事情上更改文件,因此在提交之前你不需要通过文件系统读取新结构,我的意思是它完全在你的应用程序中。
如果这是在Linux上,我会建议另一个解决方案,即使用硬链接并将文件硬链接到许多文件夹,从而实际上做任何你想要的第一个文件夹而不触及第二个文件夹。我不确定NTFS是否支持。
答案 1 :(得分:0)
如果您只想延迟对原始文件夹的更改,直到您确定要提交它们,那么工作单元模式可能会起作用。将要应用于该文件夹的所有操作存储在容器中,然后按顺序提交它们。
这听起来有点危险,因为在更改之前更改原始文件夹很容易搞砸了。在这种情况下,您必须实现某种并发检查,以尽可能确保所有操作都能成功。