2009-08-12 3 views
36

Ich möchte einfach den Inhalt eines TextBox-Steuerelements in eine Datei im Stammverzeichnis des Webserver-Verzeichnisses schreiben ... wie kann ich das angeben?Datei auf Webserver schreiben - ASP.NET

Bedenke, ich teste das lokal ... es schreibt die Datei weiter in mein Programmdateien \ Visual Studio \ Common \ IDE-Verzeichnis und nicht in mein Projektverzeichnis (von dem ich annehme, dass es im Web root ist) Server feuert ab).

Hat mein Problem etwas damit zu tun, den richtigen Ort in meiner web.config anzugeben? Ich habe versucht, dass und noch nicht gehen ...

Dank viel ...

 
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

Wenn dies mehr als ein einfaches Testprojekt ist, speichern Sie * nie * im Stammverzeichnis Ihres Webservers. Verwenden Sie einen temporären Ordner, auf den von der ganzen Welt aus nicht zugegriffen werden kann. Andernfalls können Benutzer beliebigen Inhalt auf Ihrem Server platzieren. –

Antwort

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 nimmt einen virtuellen Pfad und gibt eine absolut. "~" wird verwendet, um zum Anwendungsstamm zu gelangen.

+1

Wie @SpencerRuport erwähnt, ist es keine gute Idee, Schreibrechte für das Root-Verzeichnis zu vergeben. Es ist beispielsweise besser, einen neuen Ordner mit Schreibrechten zu erstellen und ihn für alle Ihre Ausgaben zu verwenden. – prespic

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

Beachten Sie, dass Server.MapPath "System.Web.HttpContext.Current.Server.MapPath" ist, wenn Sie Code in den Code schreiben. – styfle

8

Denken Sie daran, dass Sie dem IUSR-Konto auch Schreibzugriff für den Ordner geben müssen, sobald Sie auf Ihren Webserver hochgeladen haben.

Persönlich empfehle ich keinen Schreibzugriff auf den Stammordner, es sei denn, Sie haben einen guten Grund dafür. Und dann musst du vorsichtig sein, welche Art von Dateien du speichern darfst, damit du nicht versehentlich jemandem erlaubst, eigene ASPX-Seiten zu schreiben.

27

Es gibt Methoden wie WriteAllText in der File Klasse für allgemeine Operationen auf Dateien.

Verwenden Sie die MapPath-Methode, um den physischen Pfad für eine Datei in Ihrer Webanwendung abzurufen.

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

keine Ahnung, warum das nicht mehr upvoted ist –