2

在我的程序中,我正在调用对文件夹内容进行大量更改的方法,包括:

deleting files/folders,
changing files/folders,
adding files/folders,
adding/deleting symboliclinks/junctions.

到目前为止,这没有问题。但是我想出了将文件夹的最终状态(在所有操作完成后)选择性地投影到另一个文件夹的想法,以便原始文件夹保持不变。

仅在应用操作之前复制文件夹是不合适的,因为操作可能会删除大量数据,而这些数据必须事先进行不必要的复制。所以我想到,一个专业的程序员肯定不会这样处理它。

理想情况下,我会写这样的东西(伪代码):

originalFolder.Delete(很多文件).Add(其他一些东西,可能会更改一些权限等).ProjectTo(newFolder)

是否有某种设计模式或其他方式可以实现这样的目标?也许一些虚拟文件系统我可以在将其具体化到单独的文件夹之前对其进行处理?

我知道如何编写扩展方法,并且我已经编写了很多琐碎的方法,但我真的需要走上正确的道路才能实现这样的目标。

4

2 回答 2

1

如果添加和删除将通过您的 api 完成,那么您可以修改内存中的文件列表,而无需接触物理文件,并且当您设置好后,使用最终文件夹上的副本进行更改。

当然,这假设您不需要更改任何文件,因此您不需要在提交之前通过文件系统读取新结构,我的意思是它完全在您的应用程序中。

如果这是在 linux 上,我会建议另一种解决方案,即使用硬链接并将文件硬链接到许多文件夹,因此实际上对第一个文件夹执行任何您想要的操作,而无需触及第二个文件夹。我不确定 NTFS 是否支持。

于 2012-07-06T13:02:14.433 回答
0

如果您只想延迟对原始文件夹的更改,直到您确定要提交它们,那么工作单元模式可能会解决问题。将要应用于文件夹的所有操作存储在容器中,然后按顺序提交。

不过,这听起来有点危险,因为在更改提交之前对原始文件夹的更改很容易搞砸。在这种情况下,您必须实施某种并发检查以尽可能确保所有操作都会成功。

于 2012-07-06T12:54:59.493 回答