2013-12-12 4 views
0
내가 모든 폴더 및 하위 디렉토리 아래에있는 모든 파일을 받고 약간의 문제가있어

.. 모든 하위 디렉토리 아래의 디렉토리에있는 모든 파일과 모든 파일을 얻을 경로를 유지 이 순간 ..여기 <p></p>은 내 코드입니다 ..

이것은 모든 것을 올바르게 통과해야합니까? 모든 하위 디렉토리와 모든 것?

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 개의 폴더에서 1 개의 임의 파일이며 루트 폴더의 많은 하위 디렉토리입니다.

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

for 내부 XmlNode fileToAdd = doc.CreateElement("file");를 이동하려고 ...

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

그리고이 XML 파일에 추가 년대 방법 :

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 내부로 옮기는 것을 생각하지 않았다. –

관련 문제