Найти все файлы в папке
Я ищу, чтобы создать программу, которая находит все файлы определенного типа на моем рабочем столе и помещает их в определенные папки, например, я бы имел все файлы с .txt в папке "Текст".
Любые идеи, каким лучшим способом было бы это сделать? Спасибо.
Я пробовал это:
string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, "");
Console.WriteLine(oDirectories.Length.ToString());
foreach (string oCurrent in oDirectories)
Console.WriteLine(oCurrent);
Console.ReadLine();
Не удалось найти все файлы.
Ответы
Ответ 1
Многие из этих ответов на самом деле не будут работать, сами пробовав их. Дайте это:
string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo d = new DirectoryInfo(filepath);
foreach (var file in d.GetFiles("*.txt"))
{
Directory.Move(file.FullName, filepath + "\\TextFiles\\" + file.Name);
}
Он переместит все .txt файлы на рабочий стол в папку TextFiles
.
Ответ 2
Прежде всего; лучшей практикой было бы получить папку "Рабочий стол" пользователя с помощью
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Затем вы можете найти все файлы с чем-то вроде
string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
Обратите внимание, что в приведенной выше строке вы найдете все файлы с расширением .txt в папке "Рабочий стол" зарегистрированного пользователя и всех подпапок.
Затем вы можете скопировать или переместить файлы, перечислив вышеприведенную коллекцию, например
// For copying...
foreach (string s in files)
{
File.Copy(s, "C:\newFolder\newFilename.txt");
}
// ... Or for moving
foreach (string s in files)
{
File.Move(s, "C:\newFolder\newFilename.txt");
}
Обратите внимание, что вам нужно указать имя файла в вашей операции Copy()
(или Move()
). Таким образом, вам нужно будет найти способ определить имя файла, по крайней мере, с расширением, с которым вы имеете дело, и не называть все файлы такими же, как в предыдущем примере.
С учетом этого вы также можете проверить классы DirectoryInfo
и FileInfo
.
Они работают аналогично, но вы можете получить более подробную информацию о своих путях/именах файлов, расширениях и т.д.
Проверьте их для получения дополнительной информации:
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx
http://msdn.microsoft.com/en-us/library/ms143316.aspx
http://msdn.microsoft.com/en-us/library/system.io.file.aspx
Ответ 3
Вы можете попробовать с помощью Directory.GetFiles и исправить свой шаблон
string[] files = Directory.GetFiles(@"c:\", "*.txt");
foreach (string file in files)
{
File.Copy(file, "....");
}
Or Move
foreach (string file in files)
{
File.Move(file, "....");
}
http://msdn.microsoft.com/en-us/library/wz42302f