Дополнительные вопросы по поиску подкаталогов в C # - PullRequest
0 голосов
/ 17 декабря 2009

Я недавно задал вопрос о поиске каталогов в C # .

Программная логика

  • Список всех каталогов в строке или нескольких строках.
  • Попробуйте скопировать файл, используя строку.
    • Если это не удалось, перейдите к следующей строке,
  • Если ему удастся найти файл:
    • копия
    • перейти к следующей записи в текстовом файле

Конечный результат

Если он находит его в 4-й строке, он не пробует следующие 15 строк.

Фрагмент кода

 if (checkBox2.Checked)
        {
            string[] file_names = File.ReadAllLines(@"c:\dact.txt");
            string path1 = @"I:\pa\test\";
            string path2 = @"I:\pa\test2\";
            string path3 = @"I:\pa\test3\";
            string path4 = @"I:\pa\test4\";

            string full = (string.Concat(path1, file_names, ".txt"));
            foreach (string file_name in file_names)
            if (System.IO.File.Exists(full))
            {
                foreach (string file in file_names)
                System.IO.File.Copy(file, 
                                    @"C:\" + 
                                    textBox1.Text + 
                                    @"\\OC\" + 
                                    file_name + ".txt");
            }
        }

Приведенный выше код не содержит возможности записать сбойные файлы, я не уверен, как это сделать.

Вот чего я хочу: 1. Прочитать все строки текстового файла
2. Попробуйте скопировать файлы из определенного каталога
3. При сбое файлов он записывает в текстовый файл файлы с ошибками
4. он читает все новые «список ошибок», а затем пытается второй путь в моем списке.
5. повторяет процесс на третий путь - 19-й путь.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2009

Это простой класс, который я создал для поиска файлов определенного типа.

Он сохраняет результаты в Dictionaty, List>, где первая строка - это полный путь к каталогу, а список - полные пути к каждому файлу.

После этого вам просто нужно скопировать и вставить файлы в другое место ...

public class CheckForFile
    {
        private Dictionary<String, List<String>> FileDirectoryList;
        private String StartLocation;
        private String Format;

        public CheckForFile(String StartLocation, String Format)
        {
            this.FileDirectoryList = new Dictionary<string, List<string>>();
            this.StartLocation = StartLocation;
            this.Format = Format;
        }

        public void Discover()
        {
            DirectoryInfo di = new DirectoryInfo(this.StartLocation);
            DirectoryInfo[] ChildDirectoryList = di.GetDirectories("*", SearchOption.AllDirectories);

            foreach(DirectoryInfo ChildDir in ChildDirectoryList)
            {
                Console.WriteLine(ChildDir.FullName);
                FileInfo[] FileInfoList = ChildDir.GetFiles(this.Format);

                this.FileDirectoryList.Add(ChildDir.FullName, new List<string>());

                foreach (FileInfo ChildFileInfo in FileInfoList)
                {
                    Console.WriteLine("\t\t" + ChildFileInfo.Name);
                    this.FileDirectoryList[ChildDir.FullName].Add(ChildFileInfo.FullName);
                }
            }
        }
0 голосов
/ 17 декабря 2009

Это будет моей первой идеей по этому поводу:

String[] filesToCopy = File.ReadAllLines("yourFileHere.txt");

String sourceFolder = "yourSourceFolderHere";
String destinationFolder = "yourDestinationFolderHere";

foreach (String subFolder in Directory.GetDirectories(sourceFolder))
{
    for (int i = 0; i < filesToCopy.Length; i++)
    {
        if (!String.IsNullOrEmpty(filesToCopy[i]))
        {
        if (File.Exists(Path.Combine(subFolder, filesToCopy[i])))
        {
            File.Copy(Path.Combine(subFolder, filesToCopy[i]), Path.Combine(destinationFolder, FilesToCopy[i]));
            filesToCopy[i] = string.Empty;
        }
        }
    }
}

using (StreamWriter strm = new StreamWriter("yourOutputFile.txt"))
{
    foreach (String fileToCopy in filesToCopy)
    {
        if (!String.IsNullOrEmpty(fileToCopy))
        strm.WriteLine(fileToCopy);
    }
}

Редактировать: Исправлено неправильное копирование файла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...