Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#_.net_Filesystems_Directory - Fatal编程技术网

C# 如何将任何文件夹更改投影到新文件夹并保持原始文件夹不变?

C# 如何将任何文件夹更改投影到新文件夹并保持原始文件夹不变?,c#,.net,filesystems,directory,C#,.net,Filesystems,Directory,在我的程序中,我调用了对文件夹内容进行大量更改的方法,包括: deleting files/folders, changing files/folders, adding files/folders, adding/deleting symboliclinks/junctions. 到目前为止,这没有问题。但是我想到了一个主意,可以选择将文件夹的最终状态(在所有操作完成后)投影到另一个文件夹,这样原始文件夹就不会受到影响 在应用操作之前仅复制文件夹是不合适的,因为操作可能会删除大量数据,而这些

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

deleting files/folders,
changing files/folders,
adding files/folders,
adding/deleting symboliclinks/junctions.
到目前为止,这没有问题。但是我想到了一个主意,可以选择将文件夹的最终状态(在所有操作完成后)投影到另一个文件夹,这样原始文件夹就不会受到影响

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

理想情况下,我会编写如下内容(伪代码):

删除(许多文件)。添加(一些其他内容,可能更改一些权限等)。项目到(新文件夹)

有什么样的设计模式或其他方式可以让我达到这样的效果吗?在将其具体化到一个单独的文件夹之前,我可以在某个虚拟文件系统上进行操作吗


我知道如何编写扩展方法,而且我已经编写了很多琐碎的方法,但是我确实需要在如何实现类似的事情上走上正确的道路。

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


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

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

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


如果这是在linux上,我会建议另一种解决方案,即使用硬链接,将文件硬链接到多个文件夹,从而在不接触第二个文件夹的情况下,对第一个文件夹执行任何操作。我不确定NTFS是否支持这一点。

听起来有点不清楚。您的意思是希望能够模拟对一个文件夹中特定文件的更改,然后在另一个文件夹中进行更改。它会选择在另一个文件夹中更改哪个文件?您希望仅投影您的更改还是原始文件夹的最终状态?因为如果你只想知道原始文件夹的最终状态,那就要在你所有的操作完成后再复制一份原始文件夹……我想保证原始文件夹永远不会被触碰,所以让我们假设它是只读的。现在我想定义对该文件夹的各种虚拟更改(添加/删除文件/文件夹/链接)。然后我想在另一个位置创建一个文件夹,它是文件夹的精确副本,就像它在第一个位置被修改一样。+1-是的,我也会这样做。为了解释AhHatem,通过递归原始文件结构构建一个对象树,虚拟地在内存树上执行所有操作,然后只复制任何虚拟删除操作后剩余的文件。