Как получить полный путь к загруженному файлу в C # 3.0? - PullRequest
0 голосов
/ 20 июня 2009

На моем веб-сайте ASP.NET MVC я должен прочитать текстовый файл с некоторыми именами и электронными письмами, разделенными символом «;». После этого мне нужно сохранить каждую строку этого текстового файла в базе данных.

Погуглив, я нашел несколько фрагментов, но во всех них мне нужно использовать путь к txt-файлу.

Но как я могу получить этот путь? Этот файл может находиться где угодно на компьютере пользователя!

Спасибо !!

Ответы [ 3 ]

4 голосов
/ 20 июня 2009

Вы не можете получить полный путь к загруженному файлу. Это было бы нарушением конфиденциальности пользователя, загрузившего файл.

Вместо этого вам нужно прочитать Request.Files, которые были загружены. Например:

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
    }
}
1 голос
/ 20 июня 2009

Если вы используете модель веб-страницы asp.net, тогда Server.MapPath("~/") работает для получения корня сайта, поэтому пройдите нужный путь. Возможно, вам придется позвонить

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

Например, папка, в которой сохранены текстовые файлы:

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

Чтобы просто прочитать его, как только он у вас есть, вы можете 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());
    }
}

Если это для настольного приложения, то класс Applcation содержит всю эту информацию:

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

Application.StartupPath

Во всех свойствах перечислены другие папки и другие данные приложения, но как только у вас есть путь приложения к исполняемому файлу, вы получите контекст, такой как Application.LocalUserAppDataPath.

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

Если содержимое достаточно маленькое, вы также можете просто сохранить их в HashTable или Generic List<String> перед сохранением в базу данных.

0 голосов
/ 20 июня 2009
var hpf = Request.Files[file] as HttpPostedFile; 

форма в HTML должна иметь enctype="mulitipart/form-data"

...