C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?
比如排除的后缀名存在一个string类型数组exception中。我要获取目录path(string类型变量)及其下所有目录和子目录下除了后缀名是exception中的元...
比如排除的后缀名存在一个string类型数组exception中。我要获取目录path(string类型变量)及其下所有目录和子目录下除了后缀名是exception中的元素的文件 以外的所有文件的文件名(绝对路径)并保存在string类型的Item数组中,该怎么做?请大神指教,最好是有写好的函数(返回值:Item数组 参数:string path,string[] exception)谢谢!
展开
3个回答
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);
}
展开全部
递归遍历文件夹,在遍历的过程中判断并添加到数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
获得 文件夹下的所有文件:string[] filestrs= System.IO.Directory.GetFiles(文件夹地址);
foreach(var obj in filestrs)
{
FileInfo fi=new FileInfo(obj);
if(string.Compare(fi.Extension,"后缀名",true))
{
//排除掉
}
}
foreach(var obj in filestrs)
{
FileInfo fi=new FileInfo(obj);
if(string.Compare(fi.Extension,"后缀名",true))
{
//排除掉
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询