C# 异常文件夹:对路径的访问被拒绝
我使用以下代码访问4个文件夹。但是,有一个文件夹是私有的,只有老年人才能访问它。我怎样才能避开该文件夹并仍然访问其他4个文件夹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) {
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。我更新了我的答案