string[] dirs = Directory.GetFiles("G:\\", "*.az", SearchOption.AllDirectories);
Далее хочу копировать файлы
File.Copy(s1., Path.GetTempPath() + Namer, true);
Получаю ошибку
указан каталог, а не файл.
Как мне получить сам файл?
foreach (string s1 in dirs)
{
File.Copy(s1, Path.GetTempPath() + Namer, true);
}
Не каких Name или FullName не доступны
Как-то так:
string[] fileNames = Directory.GetFiles("G:\\", "*.az", SearchOption.AllDirectories);
string newPath = "C:\\";
foreach (var fileName in fileNames)
{
//string path = Path.GetDirectoryName(fileName);
string name = Path.GetFileName(fileName);
//Console.WriteLine(path);
//Console.WriteLine(name);
var sourceName = fileName;
var destName = Path.Combine(newPath, name);
File.Copy(sourceName, destName);
}
PS Код упрощённый, чисто для демонстрации Path.GetFileName и Path.Combine.
Я тут подумал: на самом деле если в папке есть две подпапки 1 и 2 и в каждой лежит 123.ag то они запишутся в одно и то же место, один пропадёт. По-хорошему нужно воссоздавать структуру каталогов.
Directory.EnumerateFiles("G:\\", "*.az", SearchOption.AllDirectories)
.AsParallel()
.WithDegreeOfParallelism(2)
.ForAll(d => File.Copy(d, Path.GetTempPath()+Path.GetFileName(d),true));
.....
string[] Drives = Environment.GetLogicalDrives();
foreach (string drive in Drives) {
Directory.EnumerateFiles(drive , "*.az", SearchOption.AllDirectories)
.AsParallel()
.WithDegreeOfParallelism(2)
.ForAll(d => File.Copy(d, Path.GetTempPath() + Path.GetFileName(d), true));
}
С рекурсивным поиском
string[] Drives = Environment.GetLogicalDrives();
foreach(string drive in Drives)
Search(drive);
.............
static void Search(string sDir) {
try {
Directory.EnumerateFiles(sDir, "*.az")
.AsParallel()
.WithDegreeOfParallelism(2)
.ForAll(d => File.Copy(d, Path.GetTempPath() + Path.GetFileName(d), true));
foreach(string path in Directory.EnumerateDirectories(sDir))
Search(path);
} catch (System.Exception excpt) {
//Console.WriteLine(excpt.Message);
}
}
Продвижение своими сайтами как стратегия роста и независимости