【问题标题】:Find all files in a folder查找文件夹中的所有文件
【发布时间】:2023-05-28 17:55:01
【问题描述】:

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

没有成功找到所有文件。

【问题讨论】:

标签: c# file directory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    

    然后你可以找到所有类似的文件

    string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
    

    请注意,通过上述行,您将在登录用户的 Desktop 文件夹和所有子文件夹中找到所有扩展名为 .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
    • 我想他会明白的;)但为了完整起见,我添加了两个选项。
    • 没问题 ;) 这在 foreach 循环中仍然会失败,但您为每个文件提供相同的文件名 newFilename.txt
    【解决方案3】:

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

    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

    【讨论】: