C#创建文件夹与新建目录方法详解代码示例
时间:2026-06-08 | 作者:318050 | 阅读:0在C#开发中,创建文件夹是一个高频操作,但细节容易被忽略。很多开发者第一次遇到 Directory.CreateDirectory 时,会凭直觉先判断目录是否存在。实际上,这个API设计更智能——它自带“容错”和“递归”能力。用对了能让代码简洁不少。下面拆解几个关键点。
Directory.CreateDirectory 会自动处理已存在目录
调用 Directory.CreateDirectory 创建文件夹时,即使目标路径已经存在,它也不会抛异常。而是直接返回已有的 DirectoryInfo 对象。这与 mkdir 命令或某些脚本语言的行为不同——你完全不需要提前用 Directory.Exists 去判断。
常见的冗余写法如下:
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
这多了一次磁盘查询,纯属多余。直接调用 Directory.CreateDirectory(path) 即可,API内部已帮你做了存在性检查。
路径中父目录不存在时会递归创建
Directory.CreateDirectory 的另一关键特性是自动创建完整路径链。例如 "C:ABCD" 全不存在,它会逐级建好A、B、C、D四层。省去你自己写递归循环的麻烦。
不过有几个注意事项:
- 路径必须是合法的本地路径或UNC路径(如
"\serversharedir")。不支持相对路径里带..的复杂跳转(如"....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,有时并不符合预期。这类场景建议加上日志记录和简易验证(如立刻尝试写入一个临时文件)。
来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 2026在线代码分享平台官方免费入口
- 时间:2026-06-08
-
- 2026阿里旺旺最新网页版官方登录入口
- 时间:2026-06-08
-
- VM虚拟机安装Win11系统教程
- 时间:2026-06-08
-
- 360搜索引擎登陆入口及官方账号注册网址大全
- 时间:2026-06-08
-
- Boss直聘官网入口及官方网站登录地址
- 时间:2026-06-08
-
- Excel数据透视表数值筛选方法
- 时间:2026-06-08
-
- 起点中文网本章说参与方法
- 时间:2026-06-08
-
- 先锋扬声器使用入门教程与操作步骤详解
- 时间:2026-06-08
精选合集
更多大家都在玩
大家都在看
更多-
- AutoCAD 2007面域工具使用教程与操作详解
- 时间:2026-06-07
-
- AutoCAD 2007环形阵列功能使用教程详解
- 时间:2026-06-07
-
- 受欢迎的跳跃游戏合集
- 时间:2026-06-07
-
- nero光盘刻录软件使用教程详解
- 时间:2026-06-07
-
- foobar2000中文界面设置详细教程
- 时间:2026-06-07
-
- 知网百科知识查询与学术检索官网入口指南
- 时间:2026-06-07
-
- 雷电模拟器退出时最小化到托盘设置方法
- 时间:2026-06-07
-
- 雷电模拟器4核CPU性能优化设置教程
- 时间:2026-06-07
