C#中的文件夹结构副本

时间:2011-10-22 04:46:14

标签: c# file copy directory

我正在创建一个应用程序,我们可以通过网络选择目标计算机,它会将选定的源文件复制到特定文件夹中。从本质上讲,它的目的是在一台机器上有多台app服务器的应用服务器上工作,在这种情况下是apache tomcat。

目前,我的代码能够将一个源文件处理到特定目标。它为该机器上的所有tomcat文件夹(tomcat1,tomcat2等等)执行此操作。

我正在使用directoryinfo来选择文件夹列表。

DirectoryInfo diTom = new DirectoryInfo(txtTomcat.Text);

其中txtTomcat.text是tomcat文件夹的网络路径。然后我使用foreach循环

foreach (DirectoryInfo subDir in diTomDirs)

因此,对于目录info中tomcat的每个条目,它执行一个简单的File.Copy代码,复制为每个tomcat指定的文件夹中的文件。

现在,我想扩展我的应用程序功能以考虑源文件夹,而不仅仅是文件。

e.g。我有文件夹A,包含file1.txt和文件夹B.文件夹B又包含file2.txt和file3.txt。类似的结构也会在目标tomcat上退出,但只有很少的其他文件夹和文件。

我想将源文件夹A作为源,它应该执行现有的文件复制代码,但是现在,将文件从源文件夹复制到目标上的相应文件夹,即A(源) - &gt ; A(服务器)和B(源)到B(服务器)的文件。

我希望我没有让它听起来太混乱.. :(

我想这将是我需要调整但不能弄清楚如何的foreach逻辑。

任何线索?

非常感谢,

ABHI

2 个答案:

答案 0 :(得分:1)

更简单的方法是使用递归函数。

public static void ProcessDirectory(string targetDirectory) 
{
    foreach(string fileName in Directory.GetFiles(targetDirectory))
        ProcessFile(fileName);

    foreach(string subdirectory in Directory.GetDirectories(targetDirectory))
        ProcessDirectory(subdirectory);

    // Here is called for each directory and sub directory
}

public static void ProcessFile(string path) 
{
    // Here is called for each file in all subdirectories
}

答案 1 :(得分:0)

一种选择是使用robocopy。它比你可能有时间投资的东西更强大(重试)和最佳(并行)。因为slugseter注意到它在2008年出货。

我认识很多大公司用它来推出他们的前端服务器位......

您可以从Windows资源工具包工具中获取它:

http://www.microsoft.com/download/en/details.aspx?id=17657