2009-08-12 87 views
36

我只是想将TextBox控件的内容写入Web服务器目录的根目录中的文件中......我如何指定它?请记住,我在本地测试这个文件......它不断将文件写入我的程序文件\ visual studio \ Common \ IDE目录,而不是我的项目目录(这是我认为root是web时服务器关闭)。将文件写入Web服务器 - ASP.NET

我的问题与我的web.config中指定正确的位置有关吗?我试过了,仍然没有去...

谢谢了...

 
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
    { 
     StreamWriter _testData = new StreamWriter("data.txt", true); 
     _testData.WriteLine(TextBox1.Text); // Write the file. 
     _testData.Close(); // Close the instance of StreamWriter. 
     _testData.Dispose(); // Dispose from memory.  
    }
+6

如果这不仅仅是一个简单的测试项目*永远不会*保存到您的Web服务器目录的根目录。使用无法从整个世界访问的临时文件夹,否则用户可以在服务器上放置任意内容。 – 2009-08-12 21:26:06

回答

68
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
{ 
    using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/data.txt"), true)) 
{ 
    _testData.WriteLine(TextBox1.Text); // Write the file. 
}   
} 

需要使用Server.Mappath虚拟路径并返回一个绝对的。 “〜”用于解析应用程序根目录。

+1

正如@SpencerRuport所提到的,在根目录下设置写入权限并不是一个好主意。例如,创建具有写入权限的新文件夹并将其用于所有输出更好。 – prespic 2014-11-06 15:32:44

16
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
{ 
    using (StreamWriter w = new StreamWriter(Server.MapPath("~/data.txt"), true)) 
    { 
     w.WriteLine(TextBox1.Text); // Write the text 
    } 
} 
+15

请注意,如果您在后面的代码中编写代码,Server.MapPath是'System.Web.HttpContext.Current.Server.MapPath'。 – styfle 2012-08-27 19:12:54

8

请记住,一旦您上传到Web服务器,您还必须为该文件夹提供IUSR帐户的写入权限。

个人而言,我建议不允许写入根文件夹,除非您有足够的理由这样做。然后你需要小心你允许保存哪些文件,这样你就不会无意中让别人写自己的ASPX页面。

27

File类中有类似WriteAllText的方法用于对文件进行常规操作。

使用MapPath方法获取Web应用程序中文件的物理路径。

File.WriteAllText(Server.MapPath("~/data.txt"), TextBox1.Text); 
+1

不知道为什么这不是更多upvoted – 2013-04-17 09:59:12