В настоящее время я работаю над веб-службой, которая извлекает XML-сообщение, архивирует его и затем обрабатывает его дальше. Папка архива считывается из Web.config. Это то, что метод архив выглядитC# - получить путь к файлу из файла конфигурации - @ не делает это волшебство
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 \ подпапка \ подпапка. В средах разработки, QA, UAT и PRD все работает нормально. Но на другом компьютере мне теперь нужно установить веб-службу (к сожалению, я не могу отлаживать), строка каталога - «C: Файлы». Просто, чтобы убедиться, что я дважды проверил версию .NET на разных компьютерах (я думал, возможно, использование @ до того, как строка зависела от версии); все машины используют 2.0.50727.
Кто-нибудь знает эту проблему?
Заранее благодарен!
EDIT: Я вижу @ до того, как переменная каталога вызвала некоторую путаницу в отношении вопроса, который я задал. Дело не в этом @ (на самом деле этого не должно было быть, я его удалил).
Мой вопрос (перефразированный): , когда вы помещаете @ перед цитируемой строкой, например @ "c: \ folder \ subfolder", это гарантирует, что обратные косые символы не будут интерпретироваться как escape-символы, не так ли? Что может быть причиной того, что он работает на одной машине, но не работает над другой? (я согласен с ответами, заявив использовать Path.Combine, кстати. Я просто любопытно, что вызывает это противоречивое поведение)
Я уверен, что префикс @ для строки обрабатывается компилятором C#, а не средой выполнения. Кроме того, при построении строк пути вы должны использовать 'System.IO.Path.Combine'. –
Префикс переменной с помощью @ просто позволяет создавать имя переменной с зарезервированными ключевыми словами (@return, @break и т. Д.). Не путайте с @, чтобы префикс строковых литералов. –