C#遞歸目錄下所有文件夾及文件


      今天課上講了IO操作,老師留下作業時在winForm中模擬復制剪切操作,本來不以為意,想着直接調用類庫中的幾個類就搞定了。但翻了半天文檔沒發現有針對目錄的Copy類庫,無奈之余打算根據源文件夾的樹形結構在目標文件夾中新建這些目錄,然后Copy文件。接着發現了個更為頭疼的問題,就是如何獲取指定目錄下所有文件的樹形結構以及其中的文件路徑。繼續翻文檔依舊沒發現提供好的方法,所以---自己動手豐衣足食。

      首先考慮不能直接知道文件的目錄層次,就不能直接用簡單的循環解決問題,思來想去貌似這東西要用到遞歸算法。以前就感覺遞歸是個神奇有讓我難以理解的東西。遞歸解決這種想遍歷目錄下所有文件路徑的問題確實是不二之選,不過考慮到遞歸效率低消耗資源(同時對於我這運算速度明顯沒電腦快的大腦來說更是消耗大腦細胞~~),所以打算用別的方法,但考慮到最后還是歸結到遞歸上面了,所以就還是遞歸吧......。

     首先在自己的C盤建了一個文件夾用於測試,長方形表示文件夾,三角形表示文本文件(“新建文本文檔.txt”)其樹形結構圖:

其打印結果應該是目錄列表:

  1. C:\A\B\D\G
  2. C:A\B\E\H
  3. C:\A\C\F\I
  4. C:\A\C\F\J

文件列表應該是:

  1. C:\A\B\D\新建文本文檔.txt
  2. C:\A\B\E\H\新建文本文檔.txt
  3. C:\A\C\新建文本文檔.txt
  4. C:\A\C\F\J\新建文本文檔.txt

     接下來貼上代碼,代碼注釋挺清楚的....

public class DirectoryList
{
/*利用靜態數據來存儲文件路徑列表*/
private static ArrayList directorysList = new ArrayList();//存儲目錄列表數據

public static ArrayList DirectorysList
{
get { return DirectoryList.directorysList; }
set { DirectoryList.directorysList = value; }
}
private static ArrayList fileList = new ArrayList();//存儲文件路徑列表

public static ArrayList FileList
{
get { return DirectoryList.fileList; }
set { DirectoryList.fileList = value; }
}
public static void GetDirectory(string sourcePath)
{
if (Directory.Exists(sourcePath))//判斷源文件夾是否存在
{
string[] tmp = Directory.GetFileSystemEntries(sourcePath);//獲取源文件夾中的目錄及文件路徑,存入字符串
//循環遍歷
for (int i = 0; i < tmp.Length; i++)
{
if (File.Exists(tmp[i]))//如果是文件則存入FileList
{
FileList.Add(tmp[i]);
}
else
{
if ((Directory.GetDirectories(tmp[i])).Length == 0)//如果是最后一層目錄則把其路徑存入DirectorysList
{
DirectorysList.Add(tmp[i]);
}
}
//遞歸開始.......
GetDirectory(tmp[i]);
}
}
}
}

       在控制台調用DirectoryList的靜態方法,然后讀取屬性,並打印。

 

  static void Main(string[] args)
{
DirectoryList.GetDirectory("C:/A");
Console.WriteLine("****************目錄列表************************");
foreach (string item in DirectoryList.DirectorysList)
{
Console.WriteLine(item);
}
Console.WriteLine("****************文件列表************************");
foreach (string item in DirectoryList.FileList)
{
Console.WriteLine(item);
}
}

新手自己搗鼓,難免有讓人發笑的地方,大牛們請指正.....




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM