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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?相关的知识,希望对你有一定的参考价值。

比如排除的后缀名存在一个string类型数组exception中。我要获取目录path(string类型变量)及其下所有目录和子目录下除了后缀名是exception中的元素的文件 以外的所有文件的文件名(绝对路径)并保存在string类型的Item数组中,该怎么做?请大神指教,最好是有写好的函数(返回值:Item数组 参数:string path,string[] exception)谢谢!

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);
                

参考技术A 递归遍历文件夹,在遍历的过程中判断并添加到数组。 参考技术B 获得 文件夹下的所有文件:string[] filestrs= System.IO.Directory.GetFiles(文件夹地址);

foreach(var obj in filestrs)

FileInfo fi=new FileInfo(obj);
if(string.Compare(fi.Extension,"后缀名",true))

//排除掉


PHP遍历并打印指定目录下所有文件实例

参考技术A 这篇文章主要介绍了PHP遍历并打印指定目录下所有文件实例,需要的朋友可以参考下
代码如下:
<?php
//功能:遍历并打印指定目录下所有文件

function
scan_dir($dir_name,$dir_flag=1)

static
$FILE_COUNT=1;

//记录文件数目
初值为1
目录名称不记
$FILE_COUNT--;

//每调用一次scan_dir()函数自减1
@$dir_handle=opendir($dir_name);

//抑制错误信息显示
便于自定义错误显示
if(!$dir_handle)
die("目录打开错误!");
while(false!==($filename=readdir($dir_handle)))
//文件名为‘0'时,readdir返回
FALSE,判断返回值是否不全等


$flag=$dir_flag;

//古怪的
is_dir($filename)
!
$filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false

if($filename!='.'&&$filename!='..')



$FILE_COUNT++;

//不记录当前路径和上一级路径

while($flag>0&&--$flag)

//负数仍为真

echo
'
';

if(is_dir($dir_name.$filename))
//判断
是否为一个目录



echo
'<strong>'."<a
href=".$dir_name.$filename.">".$filename."</a></strong><br>";

scan_dir($dir_name.$filename.'/',$dir_flag+1);

//$dir_flag标志目录树层次



else



echo
"<a
href=".$dir_name.$filename.">".$filename."</a><br>";





closedir($dir_handle);

//关闭目录句柄
echo
"文件总数:".$FILE_COUNT.'<br>';


scan_dir('D:wampwwwtestlamp61');
//指定的文件路径
?>

以上是关于C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

C#,给定一个目录,遍历该目录下的所有文件、文件夹

PHP遍历并打印指定目录下所有文件实例

使用java递归方法遍历指定目录下所有子目录和子文件

递归遍历指定目录下所有指定的文件并删除

C# 遍历文件夹及子目录下所有图片

bat命令遍历文件夹下指定后缀的文件但不包括子文件夹