1

C#/WPF/VS2010 を使用して ArcMap のインストール可能な拡張機能を作成しています。(これは、ここで関係がある場合とない場合があります)。私がやりたいことの 1 つは、ユーザーの一時フォルダーにデータを保存することです。だから、私は次のようにフォルダを取得します:

public static string SystemTempPath = Path.GetTempPath();

すべてをコンパイルし、WPF デザイナーで (間接的に) 変数にバインドすると、プレビュー ペインに次のように表示されます。

"C:\Users\<username>\AppData\Local\Temp\"

素晴らしい、それが私が求めているものです。しかし、ArcMap で拡張機能を実行すると、次のような結果が得られます。

"C:\Users\<username>\AppData\Local\Temp\arcA6C5\"

最後に、ArcMap を再ロードするたびに変更される追加のフォルダーに注意してください。したがって、これは拡張機能であり、ArcMap カーネルに翻弄されているため、ユーザーの一時変数ではなく、ArcMap の作成された一時フォルダーを使用しているようです。

私の質問:文字列操作以外に文法的にこれを回避する方法はありますか? この余分なものは常にそこにあり、単純に切り捨てられると想定できますが、この方法はやや汚いようです。私も同じ結果でこれを試しました:

System.Environment.GetEnvironmentVariable("TEMP");
System.Environment.GetEnvironmentVariable("TMP");

とにかく、これはわずかに汚れが少ないだけです。

助けてくれてありがとう。

4

1 に答える 1

0

問題は、ArcMap がランタイム環境 (TEMPおよびTMP環境変数) を変更して、実行ごとに一意の一時フォルダーを作成していることです。一時フォルダーを取得するための Windows API 呼び出しは、更新されたものを返します (設計による)。

私がやりたいことの 1 つは、ユーザーの一時フォルダーにデータを保存することです。

代わりに、ユーザーのアプリケーション データ フォルダー内にデータを保存することをお勧めします。これは、ユーザー データを格納するのに適した場所であり、一貫性があります。次のようなものを試してください:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
path = Path.Combine(path, @"YourCompany\YourProduct\");
于 2013-06-28T16:11:19.613 に答える