C#创建文件夹方法 C#如何新建一个目录

来源:这里教程网 时间:2026-02-21 17:42:29 作者:

Directory.CreateDirectory 会自动处理已存在目录

调用

Directory.CreateDirectory
创建文件夹时,即使目标路径已存在,它也不会报错,而是直接返回已有
DirectoryInfo
对象。这点和
mkdir
命令或某些脚本语言行为不同——你不需要提前用
Directory.Exists
判断再分支处理。

常见误操作是写成:

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

这多了一次磁盘查询,纯属冗余。直接调用

Directory.CreateDirectory(path)
即可。

路径中父目录不存在时会递归创建

Directory.CreateDirectory
的关键特性是「自动创建完整路径链」。比如
"C:\A\B\C\D"
全不存在,它会逐级建好 A、B、C、D 四层。

注意点:

路径必须是合法的本地路径或 UNC 路径(如
"\\server\share\dir"
),不支持相对路径带
..
的复杂跳转(如
"..\..\out"
)除非当前工作目录明确
如果中间某级是只读文件夹(罕见但可能),创建会失败并抛出
UnauthorizedAccessException
路径末尾加不加
\
都可以,.NET 内部会标准化

权限不足或盘符不存在时的典型错误

运行时最常遇到两类异常:

UnauthorizedAccessException
:当前用户对目标驱动器或父目录无写入权限(尤其在
C:Program Files
或系统保护路径下)

IOException
:盘符不存在(如
"Z:\myfolder"
但 Z 盘未映射)、路径含非法字符(
, |, *, ?
等)、或长度超 260 字符(旧版 Windows 默认限制)

建议做法:

捕获具体异常类型,而非泛泛的
Exception
对用户提示时,把
path
变量值也打出来,方便排查是哪一级出问题
若需长路径支持,确保项目启用
longPathAware=true
并使用 .NET Core 3.1+ 或 .NET 5+

需要判断是否真正新建了目录?用 DirectoryInfo.Exists 配合时间戳

有时业务逻辑依赖“本次是否首次创建”,而

Directory.CreateDirectory
不提供布尔返回值。可行方案是创建后检查
LastWriteTimeUtc
是否接近当前时间(误差几秒内),或更稳妥地:先调用
Directory.Exists
记录状态,再创建,最后比对。

示例逻辑:

bool wasNew = !Directory.Exists(path);
Directory.CreateDirectory(path);
if (wasNew)
{
    // 执行初始化操作,如写入默认配置文件
}

注意:不要依赖

Directory.GetCreationTime
,NTFS 下该时间可能被复制/移动操作重置,不可靠。

真正容易被忽略的是跨网络路径的延迟和权限继承细节——比如在 SMB 共享上创建目录,实际生效可能滞后,且子目录默认继承父级 ACL,未必符合预期。这类场景建议加上日志记录和简易验证(如立刻尝试写入一个临时文件)。

相关推荐