2013-08-07 3 views
1

я следующий код:Server.MapPath возвращает путь с папкой, которая не существует

var dir = @"Content\Posts\" + yr + @"\" + mnth + @"\"; 
var a = Path.Combine(dir, dy.ToString() + pId.ToString() + ".txt"); 
//a contains: "Content\\Posts\\2013\\8\\file01.txt" 
stts = obj.NotifyMail(title, writeup, "[email protected]", a); 

И чем в функции NotifyMail у меня есть это:

public bool NotifyMail(string subject, string body, string toAdd, string filePath) 
    { 
     … 
string attachments = HttpContext.Current.Server.MapPath(filePath); 
//NOW here attachments contains: "G:\\Program Files\\Derby\\Work\\Development\\proj\\proj\\`Post`\\Content\\Posts\\2013\\8\\file01.txt" 

      var attchmnts = new LinkedResource(attachments); 
      attchmnts.ContentId = "attchmnts"; 
… 
    } 

Теперь проблема заключается в NotifyMail, когда attachments извлекает путь к физическому файлу через Server.MapPath, возвращая его путь с недопустимой папкой, включенной в него, т.е. Post эта папка не существует нигде, даже на жестком диске, и я понятия не имею, как она была поднята nd. Но сказал, что это из-за этой проблемы LinkedResource(attachments); бросает исключение:

{"Could not find a part of the path ‘G:\\Program Files\\Derby\\Work\\Development\\proj\\proj\\Post\\Content\\Posts\\2013\\8\\file01.txt"’ 

ответ

1

Я не верю MapPath гарантирует, что путь существует, он просто Гвозди свой виртуальный путь к контекстному пути.

Я думаю, ваша проблема в том, что вы используете

HttpContext.Current.Server.MapPath 

попробовать с помощью

HttpContext.Current.Request.MapPath 
+0

попробовал, но все же эту дополнительную неизвестную папку на возвращаемом пути. – Maven

+0

Что-нибудь в настройках приложения web.config или IIS, которое упоминает «Сообщение»? Я думаю, это была опечатка сообщений, возможно ... ??? Кроме того, вероятно, не имеет значения, но @ «Content \ Posts \» + yr + @ "\" + mnth + @ "\" должен использовать /, а не \, так как это относительный URL-адрес, а не путь к файлу. –

0

У меня была аналогичная проблема, Вам просто нужно добавить дополнительный «\\» двойной обратный слеш перед ваш путь к файлу, как показано ниже, и дополнительное слово «Post» (которое является вашим именем класса) исчезнет.

public bool NotifyMail(string subject, string body, string toAdd, string filePath) 
    { 
string attachments = HttpContext.Current.Server.MapPath(@"\\" + filePath); 

      var attchmnts = new LinkedResource(attachments); 
      attchmnts.ContentId = "attchmnts"; 
    } 
Смежные вопросы