C# получение пути %AppData%


C# 2008 SP1

Я использую код ниже:

dt.ReadXml("%AppData%DateLinks.xml");

однако, я получаю исключение, которое указывает на расположение, где мое приложение работает от:

не удалось найти часть пути 'D:ProjectsSubVersionProjectsCatDialerbinDebug%AppData%DateLinks.xml'.

Я думал %AppData% должен найти относительный путь. Когда я пойду Start|Run|%AppData% проводник windows приводит меня к этому справочник.

Я не могу поместить полный путь, так как пользователь отличается на каждой клиентской машине.

большое спасибо за любые советы,

8 319

8 ответов:

для получения AppData

путь отличается, если вы говорите 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% переменной.

в. net2. 0 вы можете использовать переменную Application.UserAppDataPath

Я не думаю, что положить %AppData% в строку, как это будет работать.

попробовать

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()

просто хотел поделиться другим способом доступа к папке "App_Data" в моем приложении mvc, если кому-то это нужно.

 Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")

это работает для меня в консольном приложении -

string appData = System.Environment.GetEnvironmentVariable("APPDATA");