有没有办法确定我就是用 C# 创建目录的人?
默认情况下,
Directory.CreateDirectory
本质上是一个UPSERT
操作:如果目录不存在,则创建它,但如果它已经存在,那也没关系。只要有回报,每个人都高兴。
但是,我打算在完成后删除子树,如果我一开始就没有创建它,我就不想这样做。据我所知,实现这一点的唯一方法是 P/Invoke,因为使用托管 API,我必须单独测试是否存在,并且
Directory.Exists
和 Directory.CreateDirectory
之间始终存在竞争条件。
但是,在底层平台 API 中,如果目录已存在,则创建目录的调用将返回错误(Windows 上来自
ERROR_ALREADY_EXISTS
的 CreateDirectoryW
,POSIX 系统上来自 EEXIST
的 mkdir
)。
是否有一种托管方法来创建目录但前提是该目录在.NET中不存在?
在驱动器中的其他位置创建目录,然后使用
Directory.Move
方法。如果目标目录存在则失败。
如果“移动”没有失败,这可以确保您是创建者。