Directory.CreateDirectory引发异常,但仅适用于.NET核心吗?

时间:2018-08-13 18:02:21

标签: c# .net

我正在尝试将行记录到文件中,但是不幸的是,当目录不存在时,我遇到了问题,该应用程序尝试自动创建目录和文件。它可以在.NET框架上正常工作,但不能在核心上工作。

_filePath具有(在编译时)的内容

_filePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location + "/resources/logging/");

这将导致

_filePath = "B:\\App\\App\\bin\\Debug\\netcoreapp2.0\\App.Core.dll\\resources\\logging"

打印了一个异常文本,这里是内容。

  

System.IO.IOException:'无法创建   'B:\ App \ App \ bin \ Debug \ netcoreapp2.0 \ App.Core.dll'因为   具有相同名称的文件或目录。'

这是引发上述错误的行。

Directory.CreateDirectory(_filePath);

完整方法

private void LogToFile(string file, string content)
{
    var fullPath = Path.Combine(_filePath, file);

    if (!Directory.Exists(_filePath))
    {
        Directory.CreateDirectory(_filePath);
    }

    if (!File.Exists(fullPath))
    {
        File.Create(fullPath);
    }

    using (var streamWriter = new StreamWriter(_filePath + file, true))
    {
        streamWriter.WriteLine(content);
    }
}

2 个答案:

答案 0 :(得分:1)

您提供的代码也无法使用完整框架。问题是Assembly.Location属性返回当前正在运行的程序集(exe或.dll)的完整路径。尝试在该目录下创建子目录将始终失败。

相反,您应该将Path.Combine属性的目录部分与子文件夹一起使用Location(然后将结果与文件名结合使用):

   var folder = Path.Combine(
       Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), 
            "resources", 
            "logging");
   var fullPath = Path.Combine(folder, file);
   Directory.CreateDirectory(folder);

答案 1 :(得分:0)

这导致GetDirectoryName()的参数无效:

_filePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location + "/resources/logging/");

首先,获取程序集所在的文件夹,然后添加其余路径:

_filePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "/resources/logging/";