Копирование структуры папок в C # - PullRequest
0 голосов
/ 22 октября 2011

Я создаю приложение, в котором мы можем выбрать конечный компьютер по сети, и оно будет копировать выбранный исходный файл в определенную папку. По сути, он предназначен для работы на серверах приложений, где на одной машине может быть несколько серверов приложений, в данном случае apache tomcat.

В настоящее время мой код может обрабатывать один исходный файл в определенном месте назначения. Он делает это для всех папок tomcat, присутствующих на этом компьютере (tomcat1, tomcat2 ... и т.д ..)

Я использую directoryinfo для выбора списка папок.

DirectoryInfo diTom = new DirectoryInfo(txtTomcat.Text);

где txtTomcat.text - сетевой путь к папке tomcat. Тогда я использую цикл foreach

foreach (DirectoryInfo subDir in diTomDirs)

Таким образом, для каждой записи tomcat в информации каталога он выполняет простой код File.Copy, копируя файл в папку, указанную для каждого tomcat.

Теперь я хочу расширить функциональность своих приложений, чтобы они рассматривали исходные папки, а не просто файлы.

например. У меня есть папка A, содержащая file1.txt и папку B. Папка B, в свою очередь, содержит file2.txt и file3.txt. Аналогичная структура также будет отображаться на целевом коте, но с несколькими другими папками и файлами.

Я хотел бы указать исходную папку A в качестве источника, и он должен выполнить существующий код копии файла, но теперь, копируя файлы из исходной папки в соответствующую папку в месте назначения, то есть A (источник) -> A (сервер) и файлы из B (источник) в B (сервер).

Надеюсь, это не слишком запутанно ..: (

Полагаю, это была бы логика foreach, которую мне нужно настроить, но я не могу понять, как.

Есть какие-нибудь подсказки?

Большое спасибо,

Аби

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Более простой способ - использовать рекурсивную функцию.

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
}
0 голосов
/ 22 октября 2011

Одним из вариантов является использование робокопии. Это гораздо более надежно (повторы) и оптимально (параллельно), чем то, во что вы, скорее всего, успеете инвестировать. Как отметил Slugseter, оно было выпущено в 2008 году.

Я знал много крупных компаний, которые используют его, чтобы вытолкнуть свои биты серверного интерфейса ...

Вы можете получить его из инструментов набора ресурсов Windows:

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

...