有关在C#中搜索子目录的更多问题

时间:2009-12-17 13:27:31

标签: c# .net file-io

我最近在searching directories in 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 :(得分:0)

这是我的第一个想法:

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);
    }
}

编辑:修正了错误的文件复制...

答案 1 :(得分:0)

这是我用于查找特定类型文件的简单类。

它将结果存储在Dictionaty,List&gt;其中第一个字符串是目录的完整路径名,列表是每个文件的完整路径。

之后你只需将文件复制并粘贴到另一个位置......

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);
                }
            }
        }