我正在尝试将行记录到文件中,但是不幸的是,当目录不存在时,我遇到了问题,该应用程序尝试自动创建目录和文件。它可以在.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);
}
}
答案 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/";