在文件夹中查找所有文件

70

我想创建一个程序,可以在我的桌面上查找所有特定类型的文件,并将它们放入特定的文件夹中。例如,我希望所有扩展名为 .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();

它没有成功地找到所有的文件。


你尝试过什么?我建议你从DirectoryInfoFileInfo类开始。 - Alberto De Caro
3个回答

140

许多答案实际上并不起作用,我已经亲自尝试过了。可以试试这个方法:

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 中。


13

首先,最佳实践是使用以下方式获取用户的桌面文件夹:

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())操作中包含文件名。因此,您需要找到一种确定至少处理的扩展名的文件名的方法,而不是像上面的示例中那样将所有文件命名为相同的名称。
考虑到这一点,您还可以查看DirectoryInfoFileInfo类。它们以类似的方式工作,但您可以更轻松地获取有关路径/文件名、扩展名等的信息。
查看以下链接获取更多信息: 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

File.Copy 是用来将一个文件复制到另一个文件吗?你是不是指的 File.Move - dtsg
我想他会明白的 ;) 但是为了完整起见,我已经添加了两个选项。 - Gerald Versluis
没问题 ;) 不过在 foreach 循环中仍然会失败,因为你给每个文件都赋了相同的文件名 newFilename.txt - dtsg

8
您可以尝试使用 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接