C #: Как Server.Mappath может прочитать файл? - PullRequest
4 голосов
/ 12 июня 2009

У меня есть решение Visual Studio 2008, которое содержит несколько проектов. Один проект содержит WCF Service , который я развернул. Эта служба WCF ссылается на некоторый код в одном из других проектов. Этот код пытается прочитать файл, который находится в папке в проекте WCF. Структура псевдопроекта:

Solution
 Project1
  myclass.cs
    string file = Server.Mappath("");


 Project2
  filefolder
    myfile.txt

Какой правильный синтаксис можно вставить в Mappath? Я пробовал все разные варианты, такие как:

".filefolder/myfile.txt"
"/filefolder/myfile.txt"
"./filefolder/myfile.txt"
"~/filefolder/myfile.txt"

Никто, похоже, не может добраться до файла. Одна вещь, о которой я подумал: Visual Studio 2008 запускает проект и WCF в своей собственной песочнице в IIS . Может ли это быть проблемой? Будет ли это работать, если установка и развертывание в обычном IIS?

Ответы [ 6 ]

31 голосов
/ 26 октября 2009
var serverPath =
       System.Web.Hosting.HostingEnvironment.MapPath("~/filefolder/myfile.txt"); 
2 голосов
/ 02 июля 2009
Server.MapPath(Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , "Filename.txt" ));

Кажется, работает на меня. Мне нужно было включить

using System.Web.Hosting;
2 голосов
/ 13 июня 2009

Вы пытались использовать HostingEnvironment.ApplicationPhysicalPath ?

var fileInfo = new FileInfo(
    Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , @"filefolder/myfile.txt" ) );
0 голосов
/ 15 июня 2009

Проблема заключается в том, что при вызове WCF файловая система работает полностью до папки bin / Debug. Таким образом, попытка MapMath оттуда не работает. Возврат по сработанному пути:

filedata = File.ReadAllBytes("../../filefolder/myfile.txt");

Это сработало. Спасибо за помощь, ребята!

0 голосов
/ 12 июня 2009

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

Попытка:

Server.Mappath("filefolder/somefile.file");
0 голосов
/ 12 июня 2009

Лучше всего не делать этого для начала.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...