С# Получить полный путь к файлу

У меня есть элемент управления ASP FileUpload, и я загружаю:

C:\Documents and Settings\abpa\Desktop\TTPublisher\apache-tomcat-6.0.26\webapps\ttpub\WEB-INF\classes\org\gtfs\tmp\GTFS_Rail\routes.txt

Что такое код С# для захвата всей этой строки, используя приведенный ниже код:

var pathOfCsvFile = Server.MapPath(ImportRoutes.FileName);
var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile);
DataTable data = adapter.GetDataTable();

Я знаю, что Server.MapPath нужно изменить.

ОБНОВИТЬ:

Использование System.IO.Path.GetFullPath дало мне следующий вывод:

pathOfCsvFile = "C:\\Program Files\\Common Files\\Microsoft Shared\\DevServer\\10.0\\routes.txt"


person balexander    schedule 26.08.2010    source источник


Ответы (2)


Вы смешиваете поведение клиента и сервера, что легко сделать при локальном тестировании. Проблема, с которой вы столкнулись, заключается в том, что FileUploadControl (и загрузка HTML-файла в целом) специально разработан для того, чтобы не предоставить вам полный путь к файлу. Это было бы нарушением конфиденциальности. Он предназначен для предоставления вам двоичных данных загруженного файла. В частности, вы должны запросить свойства FileUploadControl: FileBytes или FileContent.

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

person Kirk Woll    schedule 26.08.2010
comment
Ах, вы правы. Дело в том, что я делаю это потому, что хочу, чтобы люди (в основном внутри) могли загружать туда CSV и обновлять/заменять данные в таблице данных. - person balexander; 26.08.2010
comment
Конечно, и в высшей степени выполнимо. Вам просто нужно получить необработанные байты (например, FileBytes или FileContent) и использовать StreamReader поверх этого, чтобы выполнить синтаксический анализ CSV. - person Kirk Woll; 26.08.2010

Server.MapPath вернет физический путь к файлу в корне приложения или ниже него. Если указанный вами путь находится за пределами корня приложения, Server.MapPath не будет работать.

Вы можете сопоставить виртуальный каталог с папкой, которую хотите использовать для загрузки файлов, которую затем можно обнаружить с помощью Server.MapPath.

person Dave Swersky    schedule 26.08.2010