我有一个asp.net网站,它使用相对路径将一些数据写入TXT文件。它使用此命令执行此操作:
string currentDirectory = "./";
string individualDeviceTxt = "myfile.txt";
System.IO.StreamWriter fileW3 = new System.IO.StreamWriter(currentDirectory + individualDeviceTxt);
文件成功写入以下路径:
C:\ Program Files(x86)\ Common Files \ microsoft shared \ DevServer \ 10.0
但是,稍后,当我尝试将此文件传输给用户时,相对目录./指向不同的路径。这是代码:
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", "attachment; filename=" + currentDirectory + individualDeviceTxt + ";");
response.TransmitFile(currentDirectory + individualDeviceTxt);
response.End();
它正在尝试发送文件来自'C:\ Users \ user \ documents \ visual studio 2010 \ Projects \ myproject \ myfile.txt这是不正确的(那里不存在。)
所以很明显,“./”指向我的第二个代码片段的不同文件夹,但我希望指向第一个代码段中使用的相同“./”。我需要做些什么来实现这一目标?我想继续使用./作为两个地方的myfile.txt目录。
答案 0 :(得分:4)
在asp.net中获取路径可能很棘手。
以下四种不同的方法可以获得当前路径,只有两种方法可以提供相同的结果。将此信息放在服务器端代码中。我喜欢使用AppDomain,它似乎最有可能找到.aspx页面所在的位置。
string paths = " Runtime Path " + System.Reflection.Assembly.GetExecutingAssembly().Location + "<br>" +
" Using Root " + new DirectoryInfo("./").FullName + "<br>" +
" Appdomain " + Path.GetDirectoryName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) + "<br>" +
" Environment " + System.Environment.CurrentDirectory;
我得到的结果是。希望这会有所帮助。
运行时路径C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ e333f875 \ 41caca57 \ assembly \ dl3 \ 9d915b4e \ ee11a5b0_20d4cd01 \ MvcTutorial.DLL
使用Root C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \
Appdomain C:\ Users \ Robert \ documents \ visual studio 2010 \ Projects \ MvcTutorial \ MvcTutorial
环境C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0
答案 1 :(得分:0)
您应该考虑使用Server.MapPath来创建在所有上下文中都应该正确的绝对系统路径(假设相同的应用程序)。