4

アプリケーションマシン全体のデータを保存したい場合は、

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

そして、ユーザーごとにデータを保存したい場合は、

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

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

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

4

4 に答える 4

2

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

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

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

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

アップデート

追加されたコメントに照らして、実行可能ファイルのパスを取得し、その下にフォルダーを作成してみませんか?

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

于 2009-06-02T10:49:43.740 に答える
1

一時ディレクトリPath.GetTempPathにデータを保存してみませんか。アプリケーションにはサブフォルダーを使用し、インスタンスには別のサブフォルダー(名前としてGuidが役立つ場合があります)を使用できます。IDisposableを実装するマネージャークラスを実装して、アプリケーションのシャットダウン時にインスタンスパスを削除できるようにします。

于 2009-06-02T10:48:30.480 に答える
0

これを行う必要がある場合は、ユーザーデータフォルダーまたはマシンデータフォルダーのいずれかにインスタンスフォルダーを作成します。アプリケーションは、終了時に不要なデータを削除する可能性があります。@ChrisFは、ほとんどの通常の動作について正しいですが。

于 2009-06-02T10:58:12.130 に答える
0

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

次に、アプリケーションの特定のコピーのファイルにアクセスする場合は、次を使用します。

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

また

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
于 2009-06-02T11:37:33.050 に答える