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;
}
}
}
问题不在于循环内部,而在于对dir.GetDirectories
或dir.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;
}