c#如何避免需要授权的文件

本文关键字:授权 文件 何避免 | 更新日期: 2023-09-27 18:06:35

好了,我有下一个问题了

我必须去一个特定的驱动器,在我的情况下,它是a(只是为了测试,因为它很小(6个文件夹和几个文件))

在那个驱动器上,我必须得到所有文件夹、子文件夹和文件的列表,并将其写入XML文件....

现在我几乎完成了…

我有所有的文件夹和文件在一个目录信息

,当我在一个foreach循环通过文件,我得到一个witch需要从操作系统的授权,并抛出一个异常,程序失败…

现在我需要处理这个异常,只是跳过那个文件,并进入下一个…

你能帮我吗?

代码如下:

private static XElement GetDirectoryXml(DirectoryInfo dir)
    {
        var info = new XElement("dir", new XAttribute("name", dir.Name));

        foreach (var file in dir.GetFiles()) //here is the exception
        {
            info.Add(new XElement("file", new XAttribute("name", file.Name)));
        }
        foreach (var subDir in dir.GetDirectories())
        {
            info.Add(GetDirectoryXml(subDir));
        }
        return info;
    }

异常是这样的:类型为'System '的未处理异常。unauthorizedaccesssexception '发生在mscorlib.dll

附加信息:访问路径'A:'Config。Msi'被拒绝。

i try a try catch block

 foreach (var file in dir.GetFiles())
        {
            try
            {
                info.Add(new XElement("file", new XAttribute("name", file.Name)));
            }
            catch (Exception e)
            {
                continue;
            }
            finally
            { }
        }

结果是一样的

BTW这里是整个代码,我使用MS Visual Studio 2013

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        var doc = new XDocument();
        var driver = new DriveInfo(@"A:'");
        foreach (var dir in driver.RootDirectory.GetDirectories())
        {
            doc = new XDocument(GetDirectoryXml(dir));
        }
        Console.WriteLine(doc.ToString());
        Console.Read();
    }
    private static XElement GetDirectoryXml(DirectoryInfo dir)
    {
        var info = new XElement("dir", new XAttribute("name", dir.Name));

        foreach (var file in dir.GetFiles())
        {
            try
            {
                info.Add(new XElement("file", new XAttribute("name",
                    file.Name)));
            }
            catch (Exception e)
            {
                continue;
            }
            finally
            { }
        }
        foreach (var subDir in dir.GetDirectories())
        {
            info.Add(GetDirectoryXml(subDir));
        }
        return info;
    }
    }
}

c#如何避免需要授权的文件

问题不在于循环内部,而在于对dir.GetDirectoriesdir.GetFiles的调用。您需要try/catch来包含它们:

private static XElement GetDirectoryXml(DirectoryInfo dir)
{
    var info = new XElement("dir", new XAttribute("name", dir.Name));
    try
    {
        foreach (var file in dir.GetFiles()) //here is the exception
        {
            info.Add(new XElement("file", new XAttribute("name", file.Name)));
        }
        foreach (var subDir in dir.GetDirectories())
        {
            info.Add(GetDirectoryXml(subDir));
        }
    }
    catch (UnauthorizedAccessException)
    {
    }
    return info;
}