2009-08-12 20 views
36

Simplemente quiero escribir el contenido de un control TextBox en un archivo en la raíz del directorio del servidor web ... ¿cómo lo especifico?Escribir archivo en el servidor web - ASP.NET

Tenga en cuenta que estoy probando esto localmente ... sigue escribiendo el archivo en mi directorio de archivos de programa \ visual studio \ Common \ IDE en lugar de en mi directorio de proyecto (que es donde asumo que es la raíz cuando la web el servidor se dispara).

¿Mi problema tiene algo que ver con la especificación de la ubicación correcta en mi web.config? He intentado eso y sigue sin ir ...

Gracias mucho ...

 
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

Si esto es más que un simple proyecto de prueba * nunca * guarde en la raíz de su directorio de servidor web. Utilice una carpeta temporal que no sea accesible desde todo el mundo, de lo contrario, los usuarios pueden colocar contenido arbitrario en su servidor. –

Respuesta

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 toma un camino virtual y devuelve un valor absoluto. "~" se usa para resolver la raíz de la aplicación.

+1

Como mencionó @SpencerRuport, no es buena idea establecer permisos de escritura en el directorio raíz. Es mejor, por ejemplo, crear una nueva carpeta con permiso de escritura y usarla para todos tus resultados. – 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

Tenga en cuenta que Server.MapPath es 'System.Web.HttpContext.Current.Server.MapPath' si está escribiendo código en el código subyacente. – styfle

8

Tenga en cuenta que también tendrá que dar acceso de escritura a la cuenta IUSR para la carpeta una vez que la cargue en su servidor web.

Personalmente, recomiendo no permitir el acceso de escritura a la carpeta raíz a menos que tenga una buena razón para hacerlo. Y luego debe tener cuidado con el tipo de archivos que permite guardar para que no permita inadvertidamente que alguien escriba sus propias páginas ASPX.

27

Existen métodos como WriteAllText en la clase File para operaciones comunes en archivos.

Utilice el método MapPath para obtener la ruta física de un archivo en su aplicación web.

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

ni idea de por qué esto no es más votado –

Cuestiones relacionadas