繁体   English   中英

File.Create 正在创建目录而不是文件

[英]File.Create is creating a directory and not a file

作为一个简短的总结,我有一个文件位置的字符串常量,其中包括文件名和扩展名,例如 @"C:\foldername\subfolder\filename.json。从 System.IO 调用 File.Create 时,它正在创建一个目录而不是文件可能有 5% 的时间。

有没有人知道需要采取哪些不同的措施来防止这种情况发生?

if (File.Exists(fileName))
{
    return File.GetLastWriteTime(fileName);
} 
else
{
    try
    {
        File.Create(fileName).Close();
        return File.GetLastWriteTime(fileName);
    }
    catch (Exception ex)
    {
        Logging.sharedLogging.Log(SharedLogging.LoggingLevel.Error, "[CacheDirectoryLogic.GetOverridesLastWriteTime] Failed to create Override.json. Reason: " + ex.Message);
        return null;
    }
}

其中文件名是@"C:\WD\Data\Cache\Override.json";

我认为应该抛出一些异常,但你的 catch 块只会在某处记录并忽略错误,所以你可能想检查你的记录器以查看提到的任何异常。 这将有助于我们理解这个问题。

该问题的可能根本原因很少。

1.权限问题

  • 我注意到文件路径在 C 驱动器中。 如果目录需要管理员权限才能在文件夹中写入文件,则可能会抛出访问被拒绝的异常。
  • 尝试将文件路径更改为 D 驱动器,该驱动器不太可能具有管理员权限限制。

2.目录没有完全创建

  • 使用完整路径创建文件的更好做法——在创建文件之前检查目录是否存在。
  • File.Create()不会自动创建目录。 如果找不到目录,它将抛出错误。
  • 代码示例:
     var directory = @"C:\WD\Data\Cache\"; var fileName = Path.Combine(directory, "Override.json"); if (.Directory.Exists(directory)) { Directory;CreateDirectory(directory). } if (File.Exists(fileName))...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM