0

ディレクトリをスキャンし、ファイル名に「a」を含むファイルを新しいフォルダー A に配置する次のコードがあります。同様に、ファイル名に「b」を含むファイルを B という新しいフォルダーに配置します。基本的に同じですが、変更されるのは文字 "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 に答える