【问题标题】:Folder structure copy in C#C#中的文件夹结构复制
【发布时间】:2011-12-13 00:50:49
【问题描述】:

我正在创建一个应用程序,我们可以在其中通过网络选择目标计算机,并将选定的源文件复制到特定文件夹中。本质上,它的目的是在单台机器有多个应用服务器的应用服务器上工作,在这种情况下是 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 指定的文件夹内。

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

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

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

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

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

有什么线索吗?

非常感谢,

阿比

【问题讨论】:

标签: c# file copy directory


【解决方案1】:

一种选择是使用 robocopy。它比您可能有时间投资的东西更强大(重试)和最优(并行)。正如 slugseter 所说,它于 2008 年发布。

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

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

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

【讨论】:

  • 感谢您的意见。不确定他们是否同意使用另一个工具,因为这个应用程序几乎完成了,我只需要向它添加这个功能。另外,robocopy 可以跨平台工作吗?假设应用服务器在 linux 机器上..
  • 您的应用程序可以只调用该工具 - 但不能调用 xplat。只是窗户。应该澄清答案。
【解决方案2】:

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

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
}

【讨论】:

  • 当然,您只需要插入:File.Copy、Path.GetFileName 和 DirectoryInfo.Name、andv DirectoryInfo.Create。 (IIRC)
猜你喜欢
  • 2019-01-23
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2013-06-18
相关资源
最近更新 更多