C#2008 SP1
私は以下のコードを使っています。
dt.ReadXml("%AppData%\\DateLinks.xml");
しかし、私は自分のアプリケーションが実行されている場所の場所を指す例外を受け取っています。
パス「D:\ Projects\SubVersionProjects\CatDialer\bin\Debug \%AppData%\ DateLinks.xml」の一部が見つかりませんでした。
%AppData%
は相対パスを見つけるべきだと思いました。 Start|Run|%AppData%
ウィンドウズエクスプローラは私をそのディレクトリに連れて行きます。
ユーザーは各クライアントマシンで異なるため、フルパスを入力することはできません。
AppDataディレクトリを取得するには、GetFolderPath
メソッドを使用するのが最善です。
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
(存在しない場合はusing System
を追加する必要があります)。
%AppData%
は環境変数であり、.NETの任意の場所で自動的に展開されるわけではありませんが、明示的に Environment.ExpandEnvironmentVariable
メソッドを使用して実行できます。 JohannesRössel氏がコメントで指摘しているように、特定の状況では%AppData%
を設定できない可能性があるため、GetFolderPath
を使用することを強くお勧めします。
最後に、例に示すようにパスを作成します。
var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "DateLinks.xml");
あなたがASP.NETを話しているならば、パスは異なります。
ASP.NETの/ App_Dataを指す 'SpecialFolder'値が見つかりませんでした。
代わりにこれを行う必要があります。
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
(注:MVC Controllerでは 'Current'プロパティは必要ありません)
App_Data
に到達するための別の「抽象的な」方法があるならば、その方法を聞きたいのです。
AppDataディレクトリを使用するBEST、は を使用する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()
誰かがこれを必要とする場合に備えて、私のMVCアプリケーションの「App_Data」フォルダにアクセスする別の方法を共有したいと思っただけです。
Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")
ASP.NETでは、Load User Profile
設定をアプリプールに設定する必要がありますが、それだけでは不十分です。 \Windows\System32\inetsrv\Config\applicationHost.config
にはsetProfileEnvironment
という名前の隠し設定があります。これは、何らかの理由で ドキュメント で説明されているように、デフォルトではオフになっています。デフォルトを変更するか、アプリプールに設定することができます。 Environment
クラスのすべてのメソッドは適切な値を返します。
これはコンソールアプリケーションで私のために働いています -
string appData = System.Environment.GetEnvironmentVariable("APPDATA");