我正在编写一个示例来写入静态文件(.txt)。
我试过了:
public IActionResult Index()
{
string dt = DateTimeOffset.Now.ToString("ddMMyyyy");
string path = Path.Combine(_environment.WebRootPath, $"Logs/{dt}");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filePath = Path.Combine(_environment.WebRootPath, $"Logs/{dt}/{dt}.txt");
using (FileStream fs = System.IO.File.Create(filePath))
{
AddText(fs, "foo");
AddText(fs, "bar\tbaz");
}
return View();
}
private void AddText(FileStream fs, string value)
{
byte[] info = new System.Text.UTF8Encoding(true).GetBytes(value);
fs.Write(info, 0, info.Length);
}
但它创建了wwwroot
文件夹内的所有内容,而不是项目的根目录。
我想在这里创建文本文件:
我可以在哪里编辑?
更新
这是我定义_environment
:
public class HomeController : Controller
{
private readonly IHostingEnvironment _environment;
public HomeController(IHostingEnvironment environment)
{
_environment = environment;
}
}
答案 0 :(得分:4)
问题是您使用IHostingEnvironment.WebRootPath
来确定根文件夹。此属性是包含可Web服务的应用程序内容文件的目录的绝对路径 - 即wwwroot
文件夹。相反,您应该使用IHostingEnvironment.ContentRootPath
属性,该属性将为您提供包含应用程序的目录的绝对路径。
例如:
var contentRoot = _environment.ContentRootPath;
var webRoot = _environment.WebRootPath;
//contentRoot = "C:\Projects\YourWebApp"
//webRoot = "C:\Projects\YourWebApp\wwwroot"
您可以使用WebRootPath
并导航到其父目录,但如果由于某种原因您选择将wwwroot
移到其他位置,您的代码可能会中断。使用一种方法可以更好地在每个项目中为您提供正确的路径。
答案 1 :(得分:1)
而不是
string filePath = Path.Combine(_environment.WebRootPath, $"Logs/{dt}/{dt}.txt");
使用
var folder = new System.IO.DirectoryInfo(_environment.WebRootpath).Parent.FullName;
var filePath = Path.Combine(folder, $"Logs/{dt}/{dt}.txt");