我想列出我的程序可以访问的所有文件和文件夹,并将它们写入文本文件。我写了一个方法,帮助我这样做,但在某些情况下(文件夹被拒绝访问)我的程序停止工作。 我在这里搜索了很多,并找到一些链接,说使用try / catch和其他但我无法解决我的问题。
string spcdirectorypath = @"C:\Users";
string spcfiletape = "*.*";
DirectoryInfo d = new DirectoryInfo(spcdirectorypath);//Assuming Test is your Folder
FileInfo[] Files = d.GetFiles(spcfiletape, SearchOption.AllDirectories); //Getting Text files
foreach (FileInfo file in Files)
{
string str = file.FullName + "\n";
richTextBox1.AppendText(str);
}
现在我该如何解决这个问题?或者在其他人手中我可以访问该受限制的文件夹?抱歉这个重复的Q并感谢您的最佳答案:)?
答案 0 :(得分:0)
运行程序的过程应该具有所需的权限,否则您将无法访问该文件夹并枚举文件。在测试环境中,请确保以管理员身份运行此代码。
答案 1 :(得分:0)
跳过这些目录。如果失败,请忽略:
try
{
foreach (var file in Directory.GetFiles(spcdirectorypath))
{
richTextBox1.AppendText(file + "\r\n");
}
}
catch (IOException)
{
richTextBox1.AppendText("Failed " + spcdirectoryPath + "\r\n");
}
如果异常不是IOException,只需将其更改为实际抛出的异常。
答案 2 :(得分:0)
如果要避免未经授权的访问异常,则应在尝试列出文件之前检查权限。
在这里,我适应你的案例the example of MSDN关于走一个目录树:
void YourMethod()
{
string spcdirectorypath = @"C:\Users";
DirectoryInfo d = new DirectoryInfo(spcdirectorypath);
WalkDirectoryTree(d)
}
static void WalkDirectoryTree(System.IO.DirectoryInfo root)
{
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;
// First, process all the files directly under this folder
try
{
files = root.GetFiles("*.*");
}
// This is thrown if even one of the files requires permissions greater
// than the application provides.
catch (UnauthorizedAccessException e)
{
// You may decide to do something different here. For example, you
// can try to elevate your privileges and access the file again.
}
catch (System.IO.DirectoryNotFoundException e)
{
// You may decide to do something different here. For example, you
// can log soething.
}
if (files != null)
{
foreach (System.IO.FileInfo fi in files)
{
// In this example, we only access the existing FileInfo object. If we
// want to open, delete or modify the file, then
// a try-catch block is required here to handle the case
// where the file has been deleted since the call to TraverseTree().
string str = fi.FullName + "\n";
richTextBox1.AppendText(str);
}
// Now find all the subdirectories under this directory.
subDirs = root.GetDirectories();
foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
// Resursive call for each subdirectory.
WalkDirectoryTree(dirInfo);
}
}
}
答案 3 :(得分:0)
我猜UpdatusUser是该机器上的用户。用户文件夹具有受限权限。尝试在UpdatusUser下运行您的应用程序。如果您没有使用UpdatusUser运行您的应用程序,您可以尝试为您的用户设置UpdatusUser文件夹的权限(右键单击文件夹属性/安全性)。
如果您仍然遇到问题,请使用Process Monitor深入查看阻止的内容。