C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?

比如排除的后缀名存在一个string类型数组exception中。我要获取目录path(string类型变量)及其下所有目录和子目录下除了后缀名是exception中的元... 比如排除的后缀名存在一个string类型数组exception中。我要获取目录path(string类型变量)及其下所有目录和子目录下除了后缀名是exception中的元素的文件 以外的所有文件的文件名(绝对路径)并保存在string类型的Item数组中,该怎么做?请大神指教,最好是有写好的函数(返回值:Item数组 参数:string path,string[] exception)谢谢! 展开
 我来答
匿名用户
2015-03-04
展开全部
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        ArrayList Item = new ArrayList();  //动态数组保存文件名
        static void Main(string[] args)
        {
            Program pg = new Program(); 
            string[] except = new string[] { ".exe"};
           
            pg. Text(@"E:\text", except);
            for (int i = 0; i < pg.Item.Count; i++)
            {
                Console.WriteLine (pg.Item[i]);
                Console.ReadKey();
            }
        }
        public ArrayList Text(string path, string[] exception)
        {    int j = 0;
             
             DirectoryInfo search = new DirectoryInfo(path);   //
             //获取目录path下所有目录和子目录下的文件
             FileSystemInfo[] fsinfos = search.GetFileSystemInfos();
             //遍历目录下文件及其子目录下文件
             foreach (FileSystemInfo fsinfo in fsinfos)
             {
                 if (fsinfo is DirectoryInfo)     //判断是否为文件夹
                 {
                     DirectoryInfo dtinfo = new DirectoryInfo(fsinfo.FullName);
                     FileInfo[] f = dtinfo.GetFiles();//获取子目录下的文件
                     foreach (FileInfo file in f)
                     {
                         for (int i = 0; i < exception.Length; i++)
                         {
                             if (file.Name.Contains(exception[i]) == false)
                             {
                                 
                                 Item.Add (file.FullName);
                                 j++;
                             }
                         }
                     }
                 }
                 else
                 {                     
                         for (int i = 0; i < exception.Length; i++)
                         {
                             if (fsinfo.Name.Contains(exception[i]) == false)
                             {
                                 
                                 Item.Add (fsinfo.FullName);
                                 j++;
                             }
                         }
                     
                 }
             }
             
             return  Item ;
        }

    }
}
追问
感谢回答!
还有,有一个问题:
只能遍历到指定目录的下一层子目录,而我想像bat的
for /r e: %%i in (*) do echo %%i
这样的遍历所有层的文件并筛选(就像windows的查找功能,只不过我是想排除指定文件类型而查找是搜寻指定文件类型)
请问如何实现?谢谢!
如果能解决,一定采纳!
追答
//Text方法改成递归的就行了
                if (fsinfo is DirectoryInfo)     //判断是否为文件夹
                {
                    //DirectoryInfo dtinfo = new DirectoryInfo(fsinfo.FullName);
                    //FileInfo[] f = dtinfo.GetFiles();//获取子目录下的文件
                    //foreach (FileInfo file in f)
                    //{
                    //    for (int i = 0; i < exception.Length; i++)
                    //    {
                    //        if (file.Name.Contains(exception[i]) == false)
                    //        {

                    //            Item.Add(file.FullName);
                                
                    //        }
                    //    }
                    //}
                    //递归遍历更深层次文件夹
                    Text(fsinfo.FullName, exception);
                }
百度网友f4e2724
2015-03-04 · TA获得超过298个赞
知道小有建树答主
回答量:372
采纳率:0%
帮助的人:171万
展开全部
递归遍历文件夹,在遍历的过程中判断并添加到数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ml02218370
2015-03-04 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:100%
帮助的人:59.6万
展开全部
获得 文件夹下的所有文件:string[] filestrs= System.IO.Directory.GetFiles(文件夹地址);

foreach(var obj in filestrs)
{
FileInfo fi=new FileInfo(obj);
if(string.Compare(fi.Extension,"后缀名",true))
{
//排除掉
}

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式