【发布时间】:2012-09-02 04:46:33
【问题描述】:
我想列出我的程序可以访问的所有文件和文件夹,并将它们写入文本文件。我将如何获得清单?我需要一种在不可访问的文件夹上捕获或不抛出 UnauthorizedAccessExceptions 的方法。
【问题讨论】:
标签: c# file hard-drive
我想列出我的程序可以访问的所有文件和文件夹,并将它们写入文本文件。我将如何获得清单?我需要一种在不可访问的文件夹上捕获或不抛出 UnauthorizedAccessExceptions 的方法。
【问题讨论】:
标签: c# file hard-drive
查看Directory.GetFiles()及相关方法。
【讨论】:
你可以试试
var files = from file in Directory.EnumerateFiles(@"your Path", "*.*", SearchOption.AllDirectories)
select file;
【讨论】:
请尝试使用代码:
private static IEnumerable<string> Traverse(string rootDirectory)
{
IEnumerable<string> files = Enumerable.Empty<string>();
IEnumerable<string> directories = Enumerable.Empty<string>();
try
{
// The test for UnauthorizedAccessException.
var permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootDirectory);
permission.Demand();
files = Directory.GetFiles(rootDirectory);
directories = Directory.GetDirectories(rootDirectory);
}
catch
{
// Ignore folder (access denied).
rootDirectory = null;
}
if (rootDirectory != null)
yield return rootDirectory;
foreach (var file in files)
{
yield return file;
}
// Recursive call for SelectMany.
var subdirectoryItems = directories.SelectMany(Traverse);
foreach (var result in subdirectoryItems)
{
yield return result;
}
}
客户端代码:
var paths = Traverse(@"Directory path");
File.WriteAllLines(@"File path for the list", paths);
【讨论】:
使用 Serge 建议的 Traverse 和 DriveInfo 类,您可以访问电脑可用的所有文件。
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady == true)
{
var paths = Traverse(d.Name);
File.AppendAllLines(@"File path for the list", paths);
}
}
【讨论】:
试试
string[] files = Directory.GetFiles(@"C:\\", "*.*", SearchOption.AllDirectories);
这应该会给你一个包含硬盘上所有文件的数组。
【讨论】:
Access to the path 'C:\$Recycle.Bin\S-1-5-21-1211431010-2331069801-34201645-1008' is denied.