2017-01-20 5 views
-1

Я использую input type = file, и я использую Chrome, поэтому мне бы не удалось получить путь к файлу выбранного файла. Он возвращает только имя файла.Получить путь к файлу, используя имя файла из TextBox в C#

Это мой существующий код:

string path = Path.GetFullPath(appPerfLog.Value); 

я ожидал такого результата, так что я мог бы использовать полный путь в мое приложение:

C:\Users\myUsername\Desktop\someFolder\Proactive_Hiring_VW101582_Combo_200users_09210316.csv 

Но это то, что я получаю взамен:

C:\Program Files (x86)\IIS Express\Proactive_Hiring_VW101582_Combo_200users_09210316.csv 

Как я могу получить полный путь путем поиска каталоги на моем компьютере? Мне нужно использовать его для StreamReader. Google Chrome возвращает file name из-за проблем с безопасностью, поэтому мне нужна помощь по пониманию обходного пути/альтернативы.

ответ

2

Нет такой вещи, как полный путь к загруженному файлу или, по крайней мере, не тот, который вы должны использовать.

Когда вы загружаете файл на веб-сервер, используемая веб-инфраструктура хранит этот файл либо в памяти, либо на диске во временном каталоге, а оттуда он становится доступным вашему приложению в качестве потока для его чтения один раз или с помощью способа сохранить его в каталоге по вашему выбору.

То, что вы пытаетесь сделать, не будет летать, как только приложение будет развернуто на веб-сервере, потому что нет гарантии, что файл даже будет присутствовать с именем, которое он имел на клиенте , Насколько вам известно, файл с именем D:\Temp\Foo.txt на клиенте имеет имя C:\Windows\Temp\asdfg123.tmp на сервере.

Вам необходимо будет использовать соответствующие API-интерфейсы для используемой вами структуры веб-приложения. Для элемента управления ASP.NET FileUpload вам нужно будет использовать FileUpload.SaveAs(string filename), чтобы ASP.NET мог записать файл по выбранному вами пути. После этого вы можете использовать filename для чтения файла из вашего кода.

+0

Другими словами, мне просто нужно отказаться от 'input type = file' и вместо этого использовать ** FileUpload **? Просто для разъяснения. @CodeCaster – JPaulPunzalan

+0

Нет, я говорю вам, что вам нужно использовать соответствующий API. Вы можете просто использовать ввод файла, но тогда, как вы обрабатываете файл, зависит от того, как вы его читаете в первую очередь. Если это через 'Request.Files []', то это возвращает 'HttpPostedFile', который также имеет метод' SaveAs() '. – CodeCaster

+0

Чтобы уточнить, я не ** ** должен загружать файл на веб-сервер. Мне нужен полный путь для чтения файла CSV и выполнения вычислений по его значениям для результата. Есть ли решение для этого? Благодаря! – JPaulPunzalan