如何读取特定文件夹内的所有文件

129

我想在c# .net中读取特定文件夹中的所有xml文件。

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/product.xml")));

我有多个产品在类别文件夹中...想要循环遍历该文件夹并获取所有产品的XML文件名。

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));

5
你尝试了什么?没有成功的是什么?你在哪里遇到了困难?http://tinyurl.com/so-hints - Oded
7个回答

303
using System.IO;
...
foreach (string file in Directory.EnumerateFiles(folderPath, "*.xml"))
{
    string contents = File.ReadAllText(file);
}

请注意以上内容使用了 .NET 4.0 的特性;在之前的版本中,请将 EnumerateFiles 替换为 GetFiles)。另外,用您喜欢的方式替换 File.ReadAllText 来读取 xml 文件 - 可以使用 XDocumentXmlDocument 或者 XmlReader


1
'System.IO.Directory' 不包含 'EnumerateFiles' 的定义。 - ram
8
"使用 System.IO;" 太棒了!为什么不多些人能这样做呢?试图找出人们在谈论什么可以非常烦人。" - user001
1
@user001 因为通常 IDE 可以为您找到并添加这些内容 - 只需按下 ctrl+. - Marc Gravell
1
@MarcGravell 哈哈通常是这样的 :( - user001
@Vitrum 没有任何地方提到要追加它们。无论代码对每个文件的内容做什么都可以:没问题。但是它没有在任何地方提到追加。如果您正在追加,ReadAllText 也是开销 - 应该在文件内部循环,分块读取。 - Marc Gravell
显示剩余2条评论

35
using System.IO;

DirectoryInfo di = new DirectoryInfo(folder);
FileInfo[] files = di.GetFiles("*.xml");

16
using System.IO;

//...

  string[] files;

  if (Directory.Exists(Path)) {
    files = Directory.GetFiles(Path, @"*.xml", SearchOption.TopDirectoryOnly);
    //...

8

6
如果您想将一个文件夹中的所有文本文件复制到另一个文件夹并合并,您可以按照以下步骤来实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace HowToCopyTextFiles
{
  class Program
  {
    static void Main(string[] args)
    {
      string mydocpath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);     
      StringBuilder sb = new StringBuilder();
      foreach (string txtName in Directory.GetFiles(@"D:\Links","*.txt"))
      {
        using (StreamReader sr = new StreamReader(txtName))
        {
          sb.AppendLine(txtName.ToString());
          sb.AppendLine("= = = = = =");
          sb.Append(sr.ReadToEnd());
          sb.AppendLine();
          sb.AppendLine();   
        }
      }
      using (StreamWriter outfile=new StreamWriter(mydocpath + @"\AllTxtFiles.txt"))
      {    
        outfile.Write(sb.ToString());
      }   
    }
  }
}

6

我建议尝试这个方法,对于我来说它有效。

语法是Directory.GetFiles(string path, string searchPattern);

var filePath = Server.MapPath("~/App_Data/");
string[] filePaths = Directory.GetFiles(@filePath, "*.*");

这段代码将返回App_Data文件夹中的所有文件。

第二个参数 . 表示带有文件扩展名的searchPattern,其中第一个*是文件名,第二个是文件格式或文件扩展名,例如(*.png-任何具有.png格式的文件名。


2
    using System.IO;
    string[] arr=Directory.GetFiles("folderpath","*.Fileextension");
      foreach(string file in arr)
       {

       }

1
虽然这个解决方案可能回答了OP的问题,但建议不要只写一个仅包含代码的答案,因为这对未来的用户可能没有太大帮助。详细阐述一下。这个解决方案提供了什么?它将如何使OP受益?等等。 - Geoff James
我昨天刚看到的代码,但那不是复制粘贴。 - Rahul sahu
我并不是在暗示你复制粘贴了。我已经更新了我的评论。尽管如此,我的评论仍然成立。请详细说明。 - Geoff James

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