【问题标题】:c# directory not created exception occurred [closed]c#目录未创建异常发生[关闭]
【发布时间】:2021-09-29 17:41:05
【问题描述】:

如何在 C# 内部创建目录。

我正在创建类似的目录

"C:\ProgramData\Temp\Temp1\Temp2\Temp3".
This "Temp\Temp1\Temp2\Temp3"

不存在。目前。

在我在 C# 中调用方法创建目录之后。

如何创建目录?是在内部一一创建的吗? 比如 "Temp" -> "Temp1" 等等?

如果是“Temp/Temp1/Temp2”被创建,另一个程序在创建Temp2之前删除了Temp1目录,所以抛出异常?找不到喜欢的目录?

【问题讨论】:

标签: c# .net


【解决方案1】:

Directory.CreateDirectory 已经这样做了:

创建指定路径中的所有目录。

关于你的问题

如果是“Temp/Temp1/Temp2”被创建,另一个程序在创建Temp2之前删除了Temp1目录所以抛出异常?

我认为这不太可能。为什么另一个程序要删除一个甚至还不存在的目录?

该方法可能会抛出许多异常,其中一个可能是在这种不幸的情况下。您可以尝试实现:创建一个无限循环中永久删除目录的线程,然后创建另一个创建目录的线程。

是在内部一一创建的吗?

即使有可能回答这个问题,您也不应该关心或依赖该实现。 Microsoft 可以通过 .NET 框架的任何更新来改变它。它也可能取决于文件系统。如果文件系统支持 TxF(文件系统事务),比如 NTFS,他们可能会使用它,但对于 FAT32,他们不能。

在 Windows 上,他们只需调用CreateDirectory Windows API(源代码中的line 329),但他们也可以切换到CreateDirectoryTransacted Window API

【讨论】:

  • 是一个一个创建吗?内部? C# 代码?
  • @ArchitSoni:你为什么在乎? MS 可以通过 .NET 框架的任何更新来改变它。它也可能取决于文件系统。如果文件系统支持(如 NTFS),他们可能会使用 TxF,但对于 FAT32 则不能
  • 好的,谢谢。但是在创建之前进行内部检查?像“Temp1”还是“Temp2”?
【解决方案2】:

正如 Thomas Weller 所说,C# 中的 Directory.CreateDirectory 完成了这项工作。
对于你的问题:

如果是“Temp/Temp1/Temp2”被创建,另一个程序在创建Temp2之前删除了Temp1目录所以抛出异常?

我不明白这一点,为什么另一个应用会删除您的目录。
如果是这种情况,这将在其他应用程序中出现异常,并且创建目录的应用程序在尝试访问此目录时也会出现异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多