C# 检查文件夹是否存在的问题
我有以下创建文件夹的C#代码:C# 检查文件夹是否存在的问题,c#,.net,directory,C#,.net,Directory,我有以下创建文件夹的C#代码: if (!Directory.Exists(strCreatePath)) { Directory.CreateDirectory(strCreatePath); } 它可以工作,除非我有这样一个文件夹:C:\\Users\\UserName\\Desktop目录。Exists返回false,这不是真的,但随后目录。CreateDirectory抛出异常:对路径“C:\\Users\\UserName\\Desktop”的访问被拒绝。 除了捕获这样的异常
if (!Directory.Exists(strCreatePath))
{
Directory.CreateDirectory(strCreatePath);
}
它可以工作,除非我有这样一个文件夹:C:\\Users\\UserName\\Desktop
目录。Exists返回false
,这不是真的,但随后目录。CreateDirectory
抛出异常:对路径“C:\\Users\\UserName\\Desktop”的访问被拒绝。
除了捕获这样的异常(我更愿意避免)之外,你知道如何防止这种情况吗?:
如果您没有对该目录的最低只读权限,
Exists方法将返回false
因此,您看到的行为是预期的。这是一个合法的异常,即使您确实检查了权限,也可能发生,因此您最好只处理该异常。您应该首先检查目录是否为:
谢谢大家。下面是我如何处理它而不抛出不必要的异常:
[DllImportAttribute("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CreateDirectory(string lpPathName, IntPtr lpSecurityAttributes);
void createFolder(string strCreatePath)
{
if (!CreateDirectory(strCreate, IntPtr.Zero))
{
int nOSError = Marshal.GetLastWin32Error();
if (nOSError != 183) //ERROR_ALREADY_EXISTS
{
//Error
throw new System.ComponentModel.Win32Exception(nOSError);
}
}
}
存在和写入权限是两个独立的东西。您可以单独使用
Directory.CreateDirectory
,检查目录是否存在。然后你还要避免竞争条件。你是用你的用户名登录的还是其他用户帐户,你和管理员以及你的应用程序是用管理员权限运行的?@TimSchmelter:目录。CreateDirectory
将引发访问被拒绝
异常,这就是我想要的“我试图避免。@c00000fd-无论发生什么情况,您都有可能获得此异常。即使您事先检查了权限,但在检查和尝试访问权限之间,权限仍可能发生变化。如果可能,您需要处理此异常。
[DllImportAttribute("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CreateDirectory(string lpPathName, IntPtr lpSecurityAttributes);
void createFolder(string strCreatePath)
{
if (!CreateDirectory(strCreate, IntPtr.Zero))
{
int nOSError = Marshal.GetLastWin32Error();
if (nOSError != 183) //ERROR_ALREADY_EXISTS
{
//Error
throw new System.ComponentModel.Win32Exception(nOSError);
}
}
}