0

我有以下代码,它扫描一个目录并将其文件名中包含“a”的文件放入一个新文件夹 A。同样,它将文件名中包含“b”的文件放入一个名为 B 的新文件夹中。因为 if 语句是基本相同,唯一改变的是字母“a”或“b”并被发送到 destA 或 destb (目标),我该如何修剪这段代码?我知道有更好的方法,因为大部分代码都是重复的......谢谢。

static void Main()
{
    string path = @"C:\Users\me\Desktop\FOLDER";
    string destA = @"C:\Users\me\Desktop\FOLDER\A";
    string destB = @"C:\Users\me\Desktop\FOLDER\B";

    DirectoryInfo dir = new DirectoryInfo(path);
    FileInfo[] filesxx = dir.GetFiles();
    foreach (FileInfo filexx in filesxx)
    {
        if (filexx.Name.Contains("a"))
        {
            if (!Directory.Exists(destA))
                Directory.CreateDirectory(destA);
            Console.WriteLine(filexx);
            filexx.CopyTo(Path.Combine(destA, filexx.Name), true);
        }
        else if (filexx.Name.Contains("b"))
        {
            if (!Directory.Exists(destB))
                Directory.CreateDirectory(destB);
            Console.WriteLine(filexx);
            filexx.CopyTo(Path.Combine(destB, filexx.Name), true);
        } 
        else
        {
            Console.WriteLine("Other: ", filexx);
        }
    }
    Console.Read();
}
4

2 回答 2

0

如果您正在寻找的只是更少的代码,那么应该这样做。

   public static void Main()
        {
            const string TargetPath = @"C:\Users\me\Desktop\FOLDER";
            var dir = new DirectoryInfo(TargetPath);
            var files = dir.GetFiles();
            foreach (var file in files.Where(file => !CopyFile(TargetPath, file, "a")).Where(file => !CopyFile(TargetPath, file, "b")))
            {
                Console.WriteLine("Other: " + file.Name);
            }

            Console.Read();
        }

        private static bool CopyFile(string dir, FileInfo file, string match)
        {
            if (!file.Name.Contains(match))
            {
                return false;
            }

            dir = dir + "\\" + match.ToUpper();
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            Console.WriteLine(file);
            file.CopyTo(Path.Combine(dir, file.Name), true);
            return true;
        }
于 2013-03-18T20:02:32.410 回答
0

创建一个方法,如:

private Boolean MoveFile(FileInfo filexx, String nameMatch, String destDirectory) {
  Boolean result = false;
  if (filexx.Name.Contains(nameMatch)) {
    if (!Directory.Exists(destDirectory)) {
      Directory.CreateDirectory(destDirectory);
    }
    Console.WriteLine(filexx);
    filexx.CopyTo(Path.Combine(destDirecotry, filexx.Name), true);
    result = true;
  }
  return result;
}

然后根据需要调用它。

foreach(FileInfo filexx in filesxx) {
  if (!MoveFile(filexx, "a", destA)) {
    if (!MoveFile(filexx, "b", destB)) {
      Console.WriteLine("Other: ", filexx);
    }
  }
}

当然,这里有一个潜在的优先级问题。如果文件名为“abcd”怎么办?它应该去A文件夹还是B文件夹?

于 2013-03-18T19:53:40.327 回答