Давайте реализуем процедуру шаг за шагом:
using System.IO;
using System.Linq;
...
// "I just want to copy "2019" folders in " Source"
string FROM_DIR = "C:/Users/5004117928/Desktop/Source";
// "with given name 20190401, 20190402, and 20190403"
HashSet<string> acceptedFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
"20190401", "20190402", "20190403"
};
// "I want is after I click a button then it automatically only "2019" folders"
// Here we enumerate all files to copy:
// - they are from FROM_DIR, 2019 subfolder
// - they are in acceptedFiles ("20190401", "20190402", "20190403")
var files = Directory
.EnumerateFiles(Path.Combine(FROM_DIR, "2019"), "*", SearchOption.TopDirectoryOnly)
.Where(file => acceptedFiles.Contains(Path.GetFileNameWithoutExtension(file)))
.ToArray();
// will copy to "target" folder
string TO_DIR = "C:/Users/5004117928/Desktop/Target";
// Copy:
foreach (var sourceFile in files) {
// for given sourceFile we change its folder
string targetFile = Path.Combine(TO_DIR, Path.GetFileName(sourceFile));
File.Copy(sourceFile, targetFile);
}
Редактировать: Если у вас есть много каталогов на выбор, давайте перечислим их и добавим Where
:
var files = Directory
.EnumerateDirectories(FROM_DIR, "*", SearchOption.TopDirectoryOnly)
.Where(dir => new DirectoryInfo(dir).Name.StartsWith("2019"))
.SelectMany(dir => Directory
.EnumerateFiles(dir, "*")
.Where(file => acceptedFiles.Contains(Path.GetFileNameWithoutExtension(file))))
.ToArray();
...