Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常文件夹:对路径的访问被拒绝_C#_Access Denied - Fatal编程技术网

C# 异常文件夹:对路径的访问被拒绝

C# 异常文件夹:对路径的访问被拒绝,c#,access-denied,C#,Access Denied,我使用以下代码访问4个文件夹。但是,有一个文件夹是私有的,只有老年人才能访问它。我怎样才能避开该文件夹并仍然访问其他4个文件夹 class Program { const string FILENAME = @"H:\Personal\text.xml"; const string FOLDER = @"F:\Apps"; static XmlWriter writer = null; static void Main(string[] args) {

我使用以下代码访问4个文件夹。但是,有一个文件夹是私有的,只有老年人才能访问它。我怎样才能避开该文件夹并仍然访问其他4个文件夹

class Program
{
    const string FILENAME = @"H:\Personal\text.xml";
    const string FOLDER = @"F:\Apps";
    static XmlWriter writer = null;
    static void Main(string[] args)
    {
        XmlWriterSettings settings = new XmlWriterSettings
        {
            Indent = true
        };

        writer = XmlWriter.Create(FILENAME, settings);
        writer.WriteStartDocument(true);

        DirectoryInfo info = new DirectoryInfo(FOLDER);
        WriteTree(info);

        writer.WriteEndDocument();
        writer.Flush();
        writer.Close();
        Console.WriteLine("Enter Return");
        Console.ReadLine();
    }
编辑:(写入代码) 我添加了代码的其余部分,其中还包括WriteTree代码。 我没有访问管理文件夹的权限

    static long WriteTree(DirectoryInfo info)
    {  
    long size = 0;
        writer.WriteStartElement("Folder");
        try
        {
            writer.WriteAttributeString("name", info.Name);
            writer.WriteAttributeString("numberSubFolders", info.GetDirectories().Count().ToString());
            writer.WriteAttributeString("numberFiles", info.GetFiles().Count().ToString());
            writer.WriteAttributeString("date", info.LastWriteTime.ToString());


            foreach (DirectoryInfo childInfo in info.GetDirectories())
            {
                size += WriteTree(childInfo);
            }

        }
        catch (Exception ex)
        {
            string errorMsg = string.Format("Exception Folder : {0}, Error : {1}", info.FullName, ex.Message);
            Console.WriteLine(errorMsg);
            writer.WriteElementString("Error", errorMsg);
        }

        FileInfo[] fileInfo = null;
        try
        {
            fileInfo = info.GetFiles();
        }
        catch (Exception ex)
        {
            string errorMsg = string.Format("Exception FileInfo : {0}, Error : {1}", info.FullName, ex.Message);
            Console.WriteLine(errorMsg);
            writer.WriteElementString("Error", errorMsg);
        }

        if (fileInfo != null)
        {
            foreach (FileInfo finfo in fileInfo)
            {
                try
                {
                    writer.WriteStartElement("File");
                    writer.WriteAttributeString("name", finfo.Name);
                    writer.WriteAttributeString("size", finfo.Length.ToString());
                    writer.WriteAttributeString("date", info.LastWriteTime.ToString());
                    writer.WriteEndElement();
                    size += finfo.Length;
                }
                catch (Exception ex)
                {
                    string errorMsg = string.Format("Exception File : {0}, Error : {1}", finfo.FullName, ex.Message);
                    Console.WriteLine(errorMsg);
                    writer.WriteElementString("Error", errorMsg);
                }
            }
        }

        writer.WriteElementString("size", size.ToString());
        writer.WriteEndElement();
        return size;

    }
  }
 }
错误
异常文件夹:错误:对路径的访问被拒绝

您可以在使用Richard的答案写入文件之前检查权限:

或者可以在
WriteTree()
函数中使用
try catch
忽略
UnauthorizedAccessException
异常,如:

try {
    writer.WriteAttributeString("name", info.Name);
    [...]
} catch (Exception ex) {
    // If is a permission error, ignore exception
    if (ex is UnauthorizedAccessException)
         return size;

    // custom error log
    string errorMsg = string.Format("Exception Folder : {0}, Error : {1}", info.FullName, ex.Message);
    Console.WriteLine(errorMsg);
    writer.WriteElementString("Error", errorMsg);
}

您可以在使用Richard的答案写入文件之前检查权限:

或者可以在
WriteTree()
函数中使用
try catch
忽略
UnauthorizedAccessException
异常,如:

try {
    writer.WriteAttributeString("name", info.Name);
    [...]
} catch (Exception ex) {
    // If is a permission error, ignore exception
    if (ex is UnauthorizedAccessException)
         return size;

    // custom error log
    string errorMsg = string.Format("Exception Folder : {0}, Error : {1}", info.FullName, ex.Message);
    Console.WriteLine(errorMsg);
    writer.WriteElementString("Error", errorMsg);
}


显示WriteTree方法的代码您可以将文件夹/文件访问包装在一个try…catch块中,以便在用户无法访问该文件夹的情况下正常失败。使用
try catch
记录错误文件夹,并继续访问其他文件夹?如果您可以选择,您的应用程序可以请求提升的权限,以便在运行时能够访问必要的文件夹。我们需要查看
WriteTree
方法,这可能是发生错误的地方。您可以
尝试。。。catch
或您可以有一个排除列表。Show code of WriteTree method您可以将文件夹/文件访问包装在try…catch块中,以便在用户无法访问该文件夹的情况下正常失败。使用
try catch
记录错误文件夹,并继续其他文件夹?如果您可以选择,您的应用程序可以请求提升的权限,以便在运行时能够访问必要的文件夹。我们需要查看
WriteTree
方法,这可能是发生错误的地方。您可以
尝试。。。catch
或者您可以有一个排除列表。catch完全按照您期望的方法:writer=XmlWriter.Create(文件名、设置);writer.WriteStartDocument(true);DirectoryInfo=null;尝试{info=newdirectoryinfo(FOLDER);}catch(UnauthorizedAccessException){}if(info!=null)WriteTree(info);writer.WriteEndDocument();writer.Flush();writer.Close();否则,您可以从XmlWriter.Create获取execption,例如,它与目录访问无关您确定是
newdirectoryinfo(文件夹)哪一个例外?可能是
WriteTree(info)
函数…我检查了DirectoryInfo.ctor-它不会抛出未经授权的访问。所以正如您所说的,只包装writetree方法是必要的。顺便说一句,你们是从哪里得到关于UnauthorizedAccessException的信息的?你们能把它发布在你们的帖子里吗?但他在原来的问题中添加了WriteTree。现在一切都没用了)@Sim是的,您已经在
WriteTree
功能中使用了try-catch。我完全按照您期望的方法更新了answerCatch:writer=XmlWriter.Create(文件名、设置);writer.WriteStartDocument(true);DirectoryInfo=null;尝试{info=newdirectoryinfo(FOLDER);}catch(UnauthorizedAccessException){}if(info!=null)WriteTree(info);writer.WriteEndDocument();writer.Flush();writer.Close();否则,您可以从XmlWriter.Create获取execption,例如,它与目录访问无关您确定是
newdirectoryinfo(文件夹)哪一个例外?可能是
WriteTree(info)
函数…我检查了DirectoryInfo.ctor-它不会抛出未经授权的访问。所以正如您所说的,只包装writetree方法是必要的。顺便说一句,你们是从哪里得到关于UnauthorizedAccessException的信息的?你们能把它发布在你们的帖子里吗?但他在原来的问题中添加了WriteTree。现在一切都没用了)@Sim是的,您已经在
WriteTree
功能中使用了try-catch。我更新了我的答案