找不到路径'C:Program Files (x86)IIS Express~TextFilesAct
本文关键字:x86 IIS Express TextFilesAct Files Program 路径 找不到 | 更新日期: 2023-09-27 18:02:17
我尝试了许多方法在Visual Studio 2012解决方案中从名为TextFiles
的文件夹中访问文本文件
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"~/TextFiles/ActiveUsers.txt", true))
{
file.WriteLine(model.UserName.ToString());
}
但是它一直抛出错误
找不到路径"C:'Program Files (x86)'IIS"的一部分表达' ~ '文本文件' ActiveUsers.txt"。
不知道哪里写错了
您需要使用HttpServerUtility.MapPath
,这将把路径的~/
部分转换到它在硬盘驱动器上的实际位置。
所以这会改变你的代码(假设你是在一个IIS类暴露一个Server
属性到它的方法)
var path = Server.MapPath(@"~/TextFiles/ActiveUsers.txt");
using (System.IO.StreamWriter file = new System.IO.StreamWriter(path, true))
{
file.WriteLine(model.UserName.ToString());
}
我遇到了一个类似的问题,最后使用
string sFileName = HttpContext.Current.Server.MapPath(@"~/dirname/readme.txt");
这是一个古老的问题,但我自己刚刚遇到了这个问题,我想把我刚刚发现的东西加进去,以防它对其他人有帮助。
如果您关闭了UAC,但没有以提升的权限运行,并尝试写入受限制的文件(例如"Program files"文件夹),您将得到"无法找到路径的一部分"错误,而不是(正确的)访问拒绝错误。
要消除此问题,请使用提升的权限运行,如下所示:https://stackoverflow.com/a/1885543/3838199
~
不是Windows中的"用户主页"或其他任何东西。您仍然可以通过不指定完整路径来将路径设置为相对于工作目录(可执行文件所在的位置)。
对于。netcore 3.x您应该使用依赖注入来使用IWebHostEnvironment
。然后,您可以在代码中这样使用它
string wwwRootPath = _hostEnvironment.WebRootPath;
string path = Path.Combine(wwwRootPath, $"TextFiles{Path.PathSeparator}ActiveUsers.txt");
确保使用PathSeparator
,否则您可能会由于主机环境的变化而面临相同的错误。