现在的位置: 首页 > 综合 > 正文

C#遍历文件夹及其子目录

2013年03月23日 ⁄ 综合 ⁄ 共 1948字 ⁄ 字号 评论关闭
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Security.AccessControl;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("STT");
            string str = @"E:\";
            if (!str.EndsWith("\\")) 
            {
                str += "\\";
            }
            IList<FileInfo> lst = GetFiles(str);
            if (!Directory.Exists(str))
            {
                try
                {
                    Directory.CreateDirectory(str);
                }
                catch(Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.ReadKey();
                    return;
                }
            }
            if (File.Exists(str + "test.txt"))
            {
                File.Delete(str + "test.txt");
            }
            FileInfo file = new FileInfo(str + "test.txt");
            if (!file.Directory.Exists)
            {
                Directory.CreateDirectory(file.DirectoryName);
            }
            using (StreamWriter outFileWriter = new StreamWriter(str + "test.txt", false, Encoding.UTF8))
            {
                StringBuilder sb = new StringBuilder();
                foreach (FileInfo item in lst)
                {
                    sb.Append("\"");
                    sb.Append(item.FullName);
                    sb.Append("\"");
                    sb.Append(",");
                    sb.Append("\r\n");
                }
                sb.Remove(sb.Length - 2, 2);
                outFileWriter.WriteLine(sb.ToString());
                outFileWriter.Flush();
                outFileWriter.Close();
            }
            Console.WriteLine("END");
            Console.ReadKey();
        }

        private static void GetDirectorys(string strPath, ref List<string> lstDirect)
        {
            DirectoryInfo diFliles = new DirectoryInfo(strPath);
            DirectoryInfo[] diArr = diFliles.GetDirectories();
            //DirectorySecurity directorySecurity = null;
            foreach (DirectoryInfo di in diArr)
            {
                try
                {
                    //directorySecurity = new DirectorySecurity(di.FullName, AccessControlSections.Access);
                    //if (!directorySecurity.AreAccessRulesProtected)
                    //{
                    lstDirect.Add(di.FullName);
                    GetDirectorys(di.FullName, ref lstDirect);
                    //}
                }
                catch 
                {
                    continue;
                }
            }
        }
        /// <summary>
        /// 遍历当前目录及子目录
        /// </summary>
        /// <param name="strPath">文件路径</param>
        /// <returns>所有文件</returns>
        private static IList<FileInfo> GetFiles(string strPath)
        {
            List<FileInfo> lstFiles = new List<FileInfo>();
            List<string> lstDirect = new List<string>();
            lstDirect.Add(strPath);
            DirectoryInfo diFliles = null;
            GetDirectorys(strPath, ref lstDirect);
            foreach (string str in lstDirect)
            {
                try
                {
                    diFliles = new DirectoryInfo(str);
                    lstFiles.AddRange(diFliles.GetFiles());
                }
                catch 
                {
                    continue;
                }
            }
            return lstFiles;
        }
    }
}






抱歉!评论已关闭.