В настоящее время я работаю над веб-сервисом, который извлекает сообщение XML, архивирует его и затем обрабатывает. Папка архива читается из Web.config. Вот так выглядит метод архива
private void Archive(System.Xml.XmlDocument xmlDocument)
{
try
{
string directory = System.Configuration.ConfigurationManager.AppSettings.Get("ArchivePath");
ParseMessage(xmlDocument);
directory = string.Format(@"{0}\{1}\{2}", directory, _senderService, DateTime.Now.ToString("MMMyyyy"));
System.IO.Directory.CreateDirectory(directory);
string Id = _messageID;
string senderService = _senderService;
xmlDocument.Save(directory + @"\" + DateTime.Now.ToString("yyyyMMdd_") + Id + "_" + System.Guid.NewGuid().ToString().Substring(0, 13) + ".xml");
}
Структура пути, которую я извлекаю: C: \ Program Files \ Subfolder \ Subfolder. В средах разработки, QA, UAT и PRD все работает отлично. Но на другом компьютере мне теперь нужно установить веб-сервис (который, к сожалению, я не могу отладить), строка каталога - «C: Files».
Просто чтобы убедиться, что я дважды проверил версию .NET на разных компьютерах (я подумал, что, возможно, использование @ до того, как строка будет зависеть от версии); все машины используют 2.0.50727.
Кто-нибудь знает эту проблему?
Заранее спасибо!
РЕДАКТИРОВАТЬ: я вижу @ перед переменной каталога вызвало некоторую путаницу в отношении вопроса, который я задал. Речь шла не об этом @ (на самом деле этого не должно было быть. Я его убрал).
Мой вопрос (перефразированный):
когда вы помещаете символ @ перед строкой в кавычках, например @ "c: \ folder \ subfolder", это гарантирует, что обратные слеши не будут интерпретироваться как escape-символы, верно? Что может быть причиной того, что он работает на одной машине, но не работает на другой?
(Между прочим, я согласен с ответами, в которых говорится об использовании Path.Combine. Мне просто любопытно, что вызывает такое противоречивое поведение)