在.NET中,
DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
FileInfo[] allFiles = dirInfo.GetFiles("*.*", SearchOption.AllDirectories);
将获取所有文件,包括其子目录中的所有文件。
如果我想要除一个子目录以外的所有文件怎么办。
我能做到的最简单的方式和/或最有效的方法是什么?
我在.NET 4.0,c#
答案 0 :(得分:4)
试试这个:
DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
List<FileInfo> allFiles = new List<FileInfo>();
allFiles.AddRange(dirInfo.GetFiles());
foreach (DirectoryInfo di in dirInfo.GetDirectories())
{
if (di.Name != "DirIDontWant")
{
allFiles.AddRange(di.GetFiles("*.*", SearchOption.AllDirectories));
}
}
答案 1 :(得分:3)
IntelliSense和MSDN帮助我解决了这个问题:
List<string> lFiles = new List<string>();
lFiles.AddRange(Directory.GetFiles(lPath, "*", SearchOptions.AllDirectories));
GetFiles函数在MSDN here上定义。第一个参数是要搜索的目录;第二个参数是过滤器(*是通配符以获取所有文件),第三个参数是一个标志,指示是仅获取指定目录中的文件还是所有子目录。
答案 2 :(得分:0)
正如MSDN文章中所建议的那样,以深度优先的方式递归: http://msdn.microsoft.com/en-us/library/07wt70x2.aspx
// Process all files in the directory passed in, recurse on any directories
// that are found, and process the files they contain.
public static void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)
ProcessFile(fileName);
// Recurse into subdirectories of this directory.
string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}
// Insert logic for processing found files here.
public static void ProcessFile(string path)
{
Console.WriteLine("Processed file '{0}'.", path);
}