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”的访问被拒绝。 除了捕获这样的异常

我有以下创建文件夹的C#代码:

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);
        }
    }
}