Pregunta

En mi sitio web ASP.NET MVC, tengo que leer un archivo txt con algunos nombres y correos electrónicos separados por ';'. Después de eso, tengo que guardar cada línea de este archivo txt en la base de datos.

Buscando en Google, he encontrado algunos fragmentos, pero en todos tengo que usar la ruta del archivo txt.

Pero, ¿cómo puedo obtener este camino? ¡Este archivo podría estar en cualquier lugar de la máquina de un usuario!

¡Gracias!

¿Fue útil?

Solución

No puede obtener la ruta completa de un archivo cargado. Esto sería una violación de privacidad para el usuario que cargó el archivo.

En su lugar, deberá leer la Solicitud. Los archivos que se han cargado. Por ejemplo:

HttpPostedFile file = Request.Files[0];
using (StreamReader reader = new StreamReader(file.InputStream))
{
    while ((string line = reader.ReadLine()) != null) 
    {
        string[] addresses = line.Split(';');
        // Do stuff with the addresses
    }
}

Otros consejos

Si está en un modelo de página web asp.net, entonces Server.MapPath("~/") trabaja para obtener la raíz del sitio, así que pase la ruta que necesita. Es posible que deba llamar

HttpContext.Current.Server.MapPath("~/");

Por ejemplo, una carpeta donde se guardan los archivos de texto:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/");

Para leerlo una vez que lo tenga, puede StreamReader:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/");
string path = directoryOfTexts + "myfile.txt";
string alltextinfile = "";
if (File.Exists(path)) 
{
    using (StreamReader sr = new StreamReader(path)) 
    {
       //This allows you to do one Read operation.
       alltextinfile = sr.ReadToEnd());
    }
}

Si esto es para una aplicación de escritorio, la clase de Aplicación tiene toda esta información:

http://msdn.microsoft .com / es-us / library / system.windows.forms.application.startuppath.aspx

Application.StartupPath

Todas las propiedades enumeran otras carpetas de aplicaciones y otras cosas, pero una vez que tiene la ruta de la aplicación al ejecutable, esto le proporciona un contexto como Application.LocalUserAppDataPath.

http://msdn.microsoft.com /en-us/library/system.windows.forms.application_properties.aspx

Si el contenido es lo suficientemente pequeño, también puede guardarlo en un HashTable o List<String> genérico antes de guardarlo también en la base de datos.

var hpf = Request.Files[file] as HttpPostedFile; 

el formulario en el HTML debe tener enctype="mulitipart/form-data"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top