2012-07-06 25 views
2

在我的节目我打电话说做许多改变,以一个文件夹的内容方法,包括:如何将任何文件夹更改投影到新文件夹并保留原始文件?

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

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

仅仅复制文件夹之前申请的操作是不恰当的,因为操作可能会删除大量的数据,那将不得不提前被不必要地复制。所以在我看来,专业程序员肯定不会这样做。

理想我会写这样的(伪代码):

originalFolder.Delete(大量的文件)。新增(一些其他的东西,也许改变一些权限等).ProjectTo(newFolder)

是否有某种设计模式或其他方式可以实现这样的目标?也许有些虚拟文件系统可以在将它实现为独立文件夹之前做些什么?

我知道如何编写扩展方法,我已经写了很多琐碎的人,但我确实需要把正确的道路上如何实现这样的事情。

+0

听起来有点不清楚。你说你希望能够模拟一个文件夹中特定文件的变化,然后在另一个文件夹中实际做出更改。它会选择在其他文件夹中更改哪个文件? – Ocelot20 2012-07-06 12:49:55

+0

您是否只想投影您的更改或原始文件夹的最终状态?因为如果你只想要原始文件夹的最终状态,那么在完成所有操作之后,它会归结为原始文件夹的一个副本... – IvanL 2012-07-06 12:52:03

+0

我想确保原始文件夹永远不会被触摸,所以让我们假设它是只读的。现在我想定义对该文件夹的各种虚拟更改(添加/删除文件/文件夹/链接)。然后,我想在另一个位置创建一个文件夹,该文件夹与文件夹的确切副本一样,如果它是首先修改的。 – cdbeelala89 2012-07-06 12:56:48

回答

0

如果你想要的是,直到你确信你要提交他们,那么工作模式的单位可能做的伎俩拖延更改原来的文件夹。将要应用于文件夹的所有操作存储在容器中,然后按顺序提交它们。

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

1

如果添加和删除将通过您的API来完成,那么你可以修改内存中的文件列表中不接触的物理文件,当你设置做最终的文件夹副本的变化。

当然,这假设你不需要任何事项发生变化的文件这样你就不会需要通过文件系统提交之前读取新的结构,我的意思是,这将在应用程序中完全。

如果这是在Linux上,我会建议另一种解决方案是使用这些文件的硬链接和硬链接到多个文件夹,因此实际上做任何你想要的第一个文件夹而不触及第二。我不确定是否NTFS支持。

+1

+1 - 是的,这也是我会做的。为了解释AhHatem,通过递归原始文件结构来构建对象树,在内存树中虚拟执行所有操作,然后仅复制在任何虚拟删除操作之后剩下的文件。 – Surfbutler 2012-07-06 18:28:00

相关问题