#c#
#c#
Вопрос:
Я сохранил в «Строке []» идентификатор файлов, которые мне нужно переместить в другую папку.
У всех файлов разные префиксы, и есть сотни файлов.
Что я хочу сделать, так это получить полный путь к файлам, содержащим «ID», чтобы иметь возможность переместить его в другую папку.
В чем проблема?
Я не могу получить полный путь к файлу, используя только часть имен файлов. Любая помощь была бы высоко оценена.
string ID = File.ReadAllText(@"C:UsersDesktopScriptzig.txt");
Console.WriteLine(ID);
Console.ReadLine();
String root = @"C:UsersDesktopScripttiptop";
String[] lines = System.IO.File.ReadAllLines(@"C:UsersDesktopScriptzig.txt");
for (int i = 0; i <= lines.Length; i )
{
string fullPath = System.IO.Path.Combine(root,(lines[i-1]));
if (System.IO.File.Exists(fullPath))
{
Console.WriteLine("" fullPath);
}
}
for (int i = 0; i <= lines.Length;i )
{
//Console.WriteLine("" lines[i]);
string fullPath = Path.GetFullPath(@"C:UsersDesktopScripttiptop");
Console.WriteLine(System.IO.Directory.EnumerateFiles(@"C:UsersDesktopScripttiptop", lines[i]));
Комментарии:
1. Почему бы и нет? если у вас есть только 3 места, вы ищете их, просматриваете файлы, проверяете каждое место .. тада?
2. Вы имеете в виду поиск всех файлов с «идентификатором»? Попробуйте использовать подстановочный знак и перебрать возможные каталоги для сопоставления файлов
Ответ №1:
Мы можем сканировать файлы и сопоставлять их с Ids
с помощью Linq:
// HashSet<string> is faster for Contains then string[]: O(1) vs. O(N)
HashSet<string> Ids = new HashSet<string>() {
"011911772",
"123456789",
};
string[] dirsToScan = new string[] {
@"c:Utilisateurs",
@"d:MyFiles",
@"c:SomeOtherDirSomeFolder",
};
var regex = new Regex("[0-9] $");
//TODO: check search options (and restrict if possible)
var files = dirsToScan
.SelectMany(dir => Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories))
.Where(file => {
var match = regex.Match(Path.GetFileNameWithoutExtension(file));
return match.Success amp;amp; Ids.Contains(match.Value);
})
.ToArray(); // Let's materialize as an array