搜索受限访问文件夹

时间:2014-05-30 08:22:43

标签: c# restriction

我想列出我的程序可以访问的所有文件和文件夹,并将它们写入文本文件。我写了一个方法,帮助我这样做,但在某些情况下(文件夹被拒绝访问)我的程序停止工作。 我在这里搜索了很多,并找到一些链接,说使用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并感谢您的最佳答案:)?

4 个答案:

答案 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深入查看阻止的内容。