检查文件夹是否存在时出现问题

本文关键字:问题 存在 文件夹 是否 检查 | 更新日期: 2023-09-27 18:26:16

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

if (!Directory.Exists(strCreatePath))
{
    Directory.CreateDirectory(strCreatePath);
}

它是有效的,除非我有一个这样的文件夹:C:''Users''UserName''DesktopDirectory.Exists返回false,这不是真的,但Directory.CreateDirectory抛出一个异常:Access to the path 'C:''Users''UserName''Desktop' is denied.

除了发现我更喜欢避免的这种例外情况外,你知道如何防止这种情况吗?

检查文件夹是否存在时出现问题

根据文档:

如果您对该目录至少没有只读权限,Exists方法将返回false。

所以你看到的行为是意料之中的。这是一个合法的异常,即使您确实检查了权限,也可能发生,因此您最好的选择是简单地处理该异常。

您应该首先检查目录是否为ReadOnly

bool isReadOnly = ((File.GetAttributes(strCreatePath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly);
if(!isReadOnly)
{
    try
    {
         Directory.CreateDirectory(strCreatePath);
    } catch (System.UnauthorizedAccessException unauthEx)
    {
        // still the same eception ?!
        Console.Write(unauthEx.ToString());
    }
    catch (System.IO.IOException ex)
    {
        Console.Write(ex.ToString());
    }
}

谢谢大家。以下是我如何在不引发不必要的异常的情况下处理它:

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