代码隐藏中当前目录的相对路径不一致

时间:2012-12-07 01:04:11

标签: c# asp.net visual-studio-2010 httpresponse relative-path

我有一个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目录。

2 个答案:

答案 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来创建在所有上下文中都应该正确的绝对系统路径(假设相同的应用程序)。