C# получение пути %AppData%
C# 2008 SP1
Я использую код ниже:
dt.ReadXml("%AppData%DateLinks.xml");
однако, я получаю исключение, которое указывает на расположение, где мое приложение работает от:
не удалось найти часть пути 'D:ProjectsSubVersionProjectsCatDialerbinDebug%AppData%DateLinks.xml'.
Я думал %AppData%
должен найти относительный путь. Когда я пойду Start|Run|%AppData%
проводник windows приводит меня к этому справочник.
Я не могу поместить полный путь, так как пользователь отличается на каждой клиентской машине.
большое спасибо за любые советы,
8 ответов:
путь отличается, если вы говорите ASP.NET.
Я не смог найти ни одного из значений "SpecialFolder", которые указывали на /App_Data для ASP.NET.
вместо этого вам нужно сделать следующее:
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
(Примечание: вам не нужно свойство "Current" в контроллере MVC)
Если есть еще один более "абстрактный" способ добраться до
App_Data
хотелось бы услышать, как.
The лучшие способ использования каталога AppData, и использовать
Environment.ExpandEnvironmentVariable
метод.причины:
- он заменяет части вашей строки с допустимыми каталогами или что-то
- он нечувствителен к регистру
- это легко и несложно
- стандартный
- хорош для работы с пользователем вход
примеры:
string path; path = "%AppData%\stuff"; path = "%aPpdAtA%\HelloWorld"; path = "%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths path = Environment.ExpandEnvironmentVariables(path); Console.WriteLine(path);
помните, что некоторые пользователи типа
%AppData%
, несколько%appdata%
и%APpData%
Вы не хотите, чтобы в конечном итоге с:if (path.ToLower().StartsWith("%appdata%")) ; // path manipulation if (path.ToLower().StartsWith("%programfiles%")) ; // path manipulation
если переменная окружения не установлена, это не ваша вина (кроме того, когда она и). Я обычно не говорю людям не заново изобретать колесо, но после того, как я впервые пошел в другую сторону и понял, что это была плохая идея.
вы также можете использовать
Environment.ExpandEnvironmentVariables("%AppData%\DateLinks.xml");
расширения
%AppData%
переменной.
Я не думаю, что положить %AppData% в строку, как это будет работать.
попробовать
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()