我有以下创建文件夹的C#代码:
if (!Directory.Exists(strCreatePath))
{
Directory.CreateDirectory(strCreatePath);
}
它有效,除非我有一个文件夹:C:\\Users\\UserName\\Desktop
Directory.Exists
返回false
,这不是真的,但后来Directory.CreateDirectory
抛出异常:{ {1}}。
任何想法如何防止这种异常,除了我更喜欢避免?
答案 0 :(得分:1)
如果您没有对目录的最低只读权限, Exists方法将返回false。
所以你所看到的行为是预料之中的。这是一个合法的例外,即使您确实检查了权限也可能发生,所以最好的办法是简单地处理异常。
答案 1 :(得分:1)
您应首先检查目录是否为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());
}
}
答案 2 :(得分:0)
谢谢大家。以下是我在不抛出不必要的例外的情况下处理它的方法:
[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);
}
}
}