找不到路径的一部分'C:Program Files (x86)IIS Express~TextFilesActiveUsers.txt'



我尝试了许多方法在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,否则您可能会由于主机环境的变化而面临相同的错误。

最新更新