2013-12-12 161 views
0

我有一个小问题,让所有的文件夹和子目录下的所有文件。并且保持路径..获取目录中的所有文件和所有文件的所有子目录下

这里是我的代码这一刻..

这应该通过一切正确吗?所有的子目录和一切?

private List<String> DirSearch(string sDir) 
    { 
     List<String> files = new List<String>(); 
     try 
     { 
      foreach (string f in Directory.GetFiles(sDir)) 
      { 
       files.Add(f); 
      } 
      foreach (string d in Directory.GetDirectories(sDir)) 
      { 
       files.AddRange(DirSearch(d)); 
      } 
     } 
     catch (System.Exception excpt) 
     { 
      MessageBox.Show(excpt.Message); 
     } 

     return files; 
    } 

但我得到的是1根文件夹中的随机文件从根文件夹的许多子目录。 这也是我怎么称呼它:

string folderName = folderBrowserDialog1.SelectedPath; 
addFilesFromFolder(DirSearch(folderName)); 

这是那就是把他们一个XML文件的方法...

private void addFilesFromFolder(List<string> files) 
    { 
     String appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString(); 
     String gpsPath = appDataFolder + "\\GameProfileSaver"; 

     XmlDocument doc = new XmlDocument(); 
     doc.Load(gpsPath + "\\games.xml"); 
     XmlNode fileToAdd = doc.CreateElement("file"); 
     String gName = comboBox1.SelectedItem.ToString(); 
     XmlNode gameName = doc.SelectSingleNode("//games/game[gameName='" + gName + "']/Files"); 

     foreach (string f in files) 
     { 
      fileToAdd.InnerText = f; 
      gameName.AppendChild(fileToAdd); 
     } 

     doc.Save(gpsPath + "\\games.xml"); 
    } 
+0

您还可以查看[此GetFiles版本](http://msdn.microsoft.com/en-us/library/ms143316(v = vs.110).aspx)。它使用SearchOption参数支持递归。 –

+2

你可能只是做'foreach(在Directory.GetFiles(sDir,“*”,SearchOption.AllDirectories)中的字符串f)而不具有递归功能。 – MikeSmithDev

+1

阅读[Directory.EnumerateFiles](http://msdn.microsoft.com/en-us/library/dd383571(v = vs.110).aspx) –

回答

3

尝试移动XmlNode fileToAdd = doc.CreateElement("file");for内:

XmlDocument doc = new XmlDocument(); 
doc.Load(gpsPath + "\\games.xml"); 
String gName = comboBox1.SelectedItem.ToString(); 
XmlNode gameName = doc.SelectSingleNode("//games/game[gameName='" + gName + "']/Files"); 

foreach (string f in files) 
{ 
    XmlNode fileToAdd = doc.CreateElement("file");     
    fileToAdd.InnerText = f; 
    gameName.AppendChild(fileToAdd); 
} 

我怀疑因为你正在重新使用XmlNode,你只能得到列表中的最后一个文件。

+0

谢谢!这解决了我的问题......就像那么简单..我没有想过把它放在我的foreach里面...... –

相关问题