67

我正在寻找一个程序,它可以在我的桌面上找到某种类型的所有文件并将它们放入特定的文件夹中,例如,我会将所有带有 .txt 的文件放入 Text 文件夹中。

任何想法最好的方法是什么?谢谢。

我试过这个:

string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, "");
Console.WriteLine(oDirectories.Length.ToString());

foreach (string oCurrent in oDirectories)
    Console.WriteLine(oCurrent);

Console.ReadLine();

未能成功找到所有文件。

4

3 回答 3

130

很多这些答案实际上都不起作用,我自己尝试过。试一试:

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

于 2012-08-08T09:40:32.970 回答
12

首先;最佳做法是获取用户桌面文件夹

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

于 2012-08-08T09:14:18.690 回答
7

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

于 2012-08-08T09:09:21.463 回答