478 Stimmen

C# ermittelt den Pfad von %AppData%

C# 2008 SP1

Ich verwende den unten stehenden Code:

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

Ich erhalte jedoch eine Ausnahme, die auf den Ort verweist, von dem aus meine Anwendung ausgeführt wird:

Ein Teil des Pfades konnte nicht gefunden werden ' D:\Projects\SubVersionProjects\CatDialer\bin\Debug\ %AppData% \DateLinks.xml '.

Ich dachte, die %AppData% sollte den relativen Pfad finden. Wenn ich gehe Start|Run|%AppData% Der Windows-Explorer führt mich zu diesem Verzeichnis.

Ich kann den vollständigen Pfad nicht eingeben, da der Benutzer auf jedem Client-Rechner anders ist.

982voto

Noldorin Punkte 138548

Um die AppData Verzeichnis ist es am besten, die GetFolderPath Methode:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

(muss hinzufügen using System falls nicht vorhanden).

%AppData% ist eine Umgebungsvariable, und sie werden nirgendwo in .NET automatisch erweitert, obwohl Sie explizit die Environment.ExpandEnvironmentVariable Methode, dies zu tun. Ich würde Ihnen dennoch dringend empfehlen, Folgendes zu verwenden GetFolderPath denn, wie Johannes Rössel in seinem Kommentar anmerkt, %AppData% kann unter bestimmten Umständen nicht eingestellt werden.

Schließlich erstellen Sie den Pfad wie in Ihrem Beispiel gezeigt:

var fileName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), "DateLinks.xml");

82voto

Bitterblue Punkte 10984

El BESTE das AppData-Verzeichnis zu verwenden, IS zu verwenden Environment.ExpandEnvironmentVariables Methode.

Die Gründe:

  • er ersetzt Teile der Zeichenkette durch gültige Verzeichnisse oder ähnliches
  • Groß- und Kleinschreibung wird nicht berücksichtigt.
  • es ist einfach und unkompliziert
  • es ist ein Standard
  • gut für den Umgang mit Benutzereingaben

Beispiele:

string path;
path = @"%AppData%\stuff";
path = @"%aPpdAtA%\HelloWorld";
path = @"%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths

path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);

Mehr Informationen:

%ALLUSERSPROFILE%   C:\ProgramData
%APPDATA%   C:\Users\Username\AppData\Roaming
%COMMONPROGRAMFILES%    C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)%   C:\Program Files (x86)\Common Files
%COMSPEC%   C:\Windows\System32\cmd.exe
%HOMEDRIVE% C:
%HOMEPATH%  C:\Users\Username
%LOCALAPPDATA%  C:\Users\Username\AppData\Local
%PROGRAMDATA%   C:\ProgramData
%PROGRAMFILES%  C:\Program Files
%PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
%PUBLIC%    C:\Users\Public
%SystemDrive%   C:
%SystemRoot%    C:\Windows
%TEMP% and %TMP%    C:\Users\Username\AppData\Local\Temp
%USERPROFILE%   C:\Users\Username
%WINDIR%    C:\Windows

51voto

Simon_Weaver Punkte 129442

Der Weg ist anders, wenn es um ASP.NET geht.

Ich konnte keinen der "SpecialFolder"-Werte finden, der auf /App_Data für ASP.NET verweist.

Stattdessen müssen Sie Folgendes tun:

 HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")  

(Hinweis: Sie benötigen die Eigenschaft "Current" in einem MVC-Controller nicht)

Wenn es einen anderen, "abstrakteren" Weg gibt, um zu App_Data Ich würde gerne wissen, wie.

28voto

parapet Punkte 1801

Sie können auch Folgendes verwenden

Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");

zur Erweiterung der %AppData% variabel.

16voto

Nathan Punkte 11264

In .net2.0 können Sie die Variable Application.UserAppDataPath

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X