1

我必须检查不同目录数组中的每个 xml 文件。

我的代码(仍然有错误):

string files = "C:\Hello; C:\Hi; D:\Goodmorning; D:\Goodafternoon; E:\Goodevening";
//Get each path and remove whitespaces
string[] paths = files.Split(new[] { ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
//Use xmlLoc for adding \ to each file
List<string> xmlLoc = new List<string>();
//get the files in directories
string[] getFiles;
//contains the files of each directory
List<string> xmlList

//Add \ each paths variable and store it in xmlLoc list
foreach (string s in paths)
{
     xmlLoc.Add(s + @"\");
}

//get the xml files of each directory in xmlLoc and store it in xmlList
foreach (string file in xmlLoc)
{
     getFiles = Directory.GetFiles(file, "*.xml");
     //the code below lists an error "cannot convert from string[] to string"
     xmlList.Add(getFiles);
}

我猜您不能将数组存储在字符串列表中。是否有任何其他方式可以读取存储在数组中的每个目录中的文件?

4

4 回答 4

4

您是否尝试过使用AddRange

就像是

xmlList.AddRange(getFiles); 

据我所知,你也可以选择类似的东西

List<string> xmlList = files.Split(new[] {';', ' '}, StringSplitOptions.RemoveEmptyEntries).
    SelectMany(p => Directory.GetFiles(p, "*.xml")).
    ToList();
于 2012-09-04T04:30:56.160 回答
2

目前尚不清楚您要做什么,但是您可以使用该AddRange方法将string[]返回的数组的所有元素Directory.GetFiles一次添加到您的列表中:

 string[] getFiles = Directory.GetFiles(file, "*.xml");
 xmlList.AddRange(getFiles);

还要考虑以下几点:

  1. 你的xmlList实例没有初始化,试试:( List<string> xmlList = new List<string>);

  2. 构造中变量file的名称用词不当,请考虑改用,因为这就是“元素”的含义。foreachdirectoryxmlLoc

  3. 你真的不需要这个getFiles变量,在你的情况下一个简单的 xmlList.AddRange(Directory.GetFiles(file, "*.xml"));就足够了。

  4. 在空格上拆分不是一个好主意。目录名称(尽管不是您使用的示例)本身可能包含空格。

您的代码看起来有点复杂。AFAICT 以下将做同样的事情:

string directories = /* ... whatever ... */;
List<string> xmlList = new List<string>();

foreach (string directory in string.Split(new[] {';'}, StringSplitOptions..RemoveEmptyEntries))
{
   string dir = directory.Trim();

   if (!dir.EndsWith(Path.DirectorySeparator))
     dir += Path.DirectorySeparator;

   xmlList.AddRange(Directory.GetFiles(dir, "*.xml"));
}
于 2012-09-04T04:31:27.997 回答
1

解决它!只需要添加和替换一些代码.. :)

string files = "C:\Hello; C:\Hi; D:\Goodmorning; D:\Goodafternoon; E:\Goodevening";
//Get each path and remove whitespaces
string[] paths = files.Split(new[] { ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
//Use xmlLoc for adding \ to each file
List<string> xmlLoc = new List<string>();
//get the files in directories
string[] getFiles;

//Add \ each paths variable and store it in xmlLoc list
foreach (string s in paths)
{
     xmlLoc.Add(s + @"\");
}

//get the xml files of each directory in xmlLoc and loop it to read the files
foreach (string directory in xmlLoc)
{
     getFiles = Directory.GetFiles(directory, "*.xml");
     foreach(string files in getFiles)
     {
         MessageBox.Show(files);
     }
}
于 2012-09-04T04:41:02.520 回答
0

试试这个,需要初始化XML列表,GetFiles返回一个数组,所以添加到XML列表时需要调用AddRange,而不是Add。

string files = "C:\Hello; C:\Hi; D:\Goodmorning; D:\Goodafternoon; E:\Goodevening";
            //Get each path and remove whitespaces
            string[] paths = files.Split(new[] { ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
            //Use xmlLoc for adding \ to each file
            List<string> xmlLoc = new List<string>();
            //get the files in directories
            string[] getFiles;
            //contains the files of each directory
            List<string> xmlList = new List<string>();

            //Add \ each paths variable and store it in xmlLoc list
            foreach (string s in paths)
            {
                 xmlLoc.Add(s + @"\");
            }

            //get the xml files of each directory in xmlLoc and store it in xmlList
            foreach (string file in xmlLoc)
            {
                 getFiles = Directory.GetFiles(file, "*.xml");
                 //the code below lists an error "cannot convert from string[] to string"
                 xmlList.AddRange(getFiles);
            }
于 2012-09-04T06:10:18.550 回答