繁体   English   中英

从appsetting.json读取文件路径

[英]Read the file path from appsetting.json

我有一个在 asp.net 内核中开发的 webapi。 在代码中,我需要创建 xml 个文件并将其保存到共享驱动器。由于带有转义序列的路径,我遇到了问题。

在Json中,c#逐字不起作用,所以要指定路径我需要使用“\”所以我的路径变成了\root\folder1\folder2,当我在c#中读取这个时,然后尝试将“\”替换为“ " 它不起作用,它删除了两个斜杠。 我尝试使用不同的字符,如 '+' 或 '-' 并将其替换为 @"" 它仍然添加两个反斜杠。 当路径中有两个反斜杠时 windows 找不到路径。 所以它不工作。 似乎没有任何效果。

我尝试使用正斜杠 \root/folder1/folder2 然后根据正斜杠拆分并再次使用数组构建路径但即使在这里它也添加了两个反斜杠

  var path = directoryList[0].Value.Split('/');
                foreach (string item in path)
                {
                    filePath +=(string.Format(@"{0}\",item));
                }

对此有何建议?? 如何从 appsetting.json 读取路径并删除双反斜杠,以便识别路径并创建文件。

当字符串正确使用转义字符时,您不需要使用逐字标识符

直接使用它而不使用'@',或者如果您需要先添加一些根目录,请使用路径组合

string path = directoryList[0].Value; // use this dirctly if it full qulified path
string fullPath = Path.Combine(@"c:\anyRoot",path); //add some root if it a partial path

您是否考虑过让您的生活更轻松,只是发誓放弃由 MS-DOS 在 1981 年流行的反斜杠字符文件路径? 这在当时是一个不幸的选择,而且总是造成困难。

您可以安全地使用“/”作为 Windows 文件路径中的路径分隔符,因此

   var streamReader = new StreamReader("/Users/gbsil/src/filepath/hello.txt");

相当于

   streamReader = new StreamReader("\\Users\\gbsil\\src\\filepath\\hello.txt");

也相当于

streamReader = new StreamReader(@"\Users\gbsil\src\filepath\hello.txt");

如果你想要一个驱动器号

然后

streamReader = new StreamReader("c:/Users/gbsil/src/filepath/hello.txt");

工作方式与

streamReader = new StreamReader("c:\\Users\\gbsil\\src\\filepath\\hello.txt");

在此处查看文档: Windows 系统上的文件路径格式

历史记录:Unix 总是使用正斜杠“/”作为分隔符,就像 C 语言一样,所以反斜杠“”总是与此冲突。 '' 在 C 语言中用作转义字符,这使事情变得更糟 - 将 '' 放入需要写入 '\' 的字符串中。 需要运行多个平台的程序,如 JavaScript 使用 C 语言约定的“/”分隔符和“”转义字符,因为它们是用 Z0D61F8370CAD1D412F80B84D143E125 编写的。 有时使用反斜杠文件路径分隔符是有原因的,但如果你只在强制时这样做,你的生活会更轻松。

我让它工作了..所以我使用的是 xmldoc.Save() 并且默认情况下使用本地目录根目录,所以我的路径是 D:/localfoldername\shared network path\。 所以,这条线似乎已经修复了它
xmldoc.Save("\{0}",path) ,现在路径为 \shared Network Path\ 并且我的文件保存得很好。

感谢所有的投入。

对于 do.net 核心 6

  1. 在 PM 上安装 serilog.extensions.logging.file

  2. 在 Program.cs 中

app.Services.GetService().AddFile(builder.Configuration["Logging:LogFilePath"].ToString());
  1. 在 appsettings.json
"Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "LogFilePath": "D:\\Logs\\CSMonitor_{Date}.txt"
}
   

暂无
暂无

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

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