2013-12-12 197 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裏面...... –

相關問題