質問

まあ、アプリケーションのデータをマシン全体に保存したい場合は、単に使用します

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

そして、ユーザーごとにデータを保存したい場合は、私が使用する

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

しかし、アプリケーション インスタンスごとにデータを保存したい場合はどうすればよいでしょうか?アプリケーションが保存されているフォルダーを使用することもできますが、正しく理解していれば、「プログラムファイル」フォルダーはこのタイプのデータストレージ用に作成されていません...

編集:アプリケーションを異なるフォルダーに2回インストールした場合の意味を明確にするために...インスタンスが実行されていません。

役に立ちましたか?

解決

それを行う他のアプリケーションを私は知りません。

たとえば、Visual Studio のコピーを 2 つ実行すると、最後に閉じたインスタンスの設定が保持されると予想されます。

インスタンスに一意の ID (GUID) を割り当てた場合、次回アプリケーションを実行するときにその値をどのように再利用しますか?それとも、アプリケーションを実行するたびに新しい値のセットを取得したいですか?

再利用したい場合は、番号付きのサブディレクトリ (1、2、3、4 など) を作成し、アプリケーションを実行するたびにそのディレクトリにロック ファイルを書き込むことができます。次に、ロック ファイルの存在を確認し、ロックされていないフォルダーが見つかるまで番号を増やします。

アップデート

追加されたコメントを考慮して、実行可能ファイルのパスを取得して、その下にフォルダーを作成してみてはいかがでしょうか。

ユーザーがそのフォルダーに対する権限を持っていない場合は、その場所と GUID (たとえば) の間に何らかのマッピングを作成し、それをアプリケーション設定とユーザー設定のパスに追加する必要があります。

他のヒント

なぜあなたは一時ディレクトリPath.GetTempPathにデータを格納しないでください。あなたは、インスタンスのために(多分名前としてGUIDが有用であろう)、アプリケーションや他のサブフォルダ用のサブフォルダを使用することができます。私は、アプリケーションのシャットダウン時に、インスタンス・パスを削除できるように、IDisposableを実装し、いくつかのマネージャクラスを実装します。

これを行うために必要がある場合は、

ユーザーデータフォルダまたはマシンデータフォルダのいずれかの下のインスタンスのフォルダを作成します。アプリケーションは、終了時にすべてのアンたかったデータを削除することができます。けれども@ChrisFは、最も一般的な行動についての権利である。

1 つの可能性は、プログラムの初回実行時に一意の ID を生成し、それをプログラム固有の場所 (おそらくローカル構成ファイル) に保存することです。

その後、アプリケーションの特定のコピーのファイルにアクセスしたいときは、単に次を使用します。

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "\" + uniqueid);

または

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top