File.Create是在创建一个目录,而不是一个文件



作为一个简短的摘要,我有一个文件位置的字符串常量,其中包括文件名和扩展名,例如@"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;
}
}

其中fileName是@";C: \WD\Data\Cache\Override.json";

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

这个问题几乎没有可能的根本原因。

1.权限问题

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

2.目录未完全创建

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

相关内容

最新更新