26

アプリケーションに関連するデータはどこに保存すればよいですか?構成ファイルはどこに保存すればよいですか?一時ファイルはどこに保存すればよいですか?「ドキュメント」でやるべきですか?"アプリデータ"?等...

データをディスクに保存するためのベストプラクティスは何ですか(おそらく、特別なフォルダのベストプラクティスですか?!)?

4

5 に答える 5

28

ApplicationData:アプリケーションが「ユーザーごと」のデータとして必要とし、他のカテゴリに分類されないものすべて。標準の構成ファイルはここにあります。

CommonApplicationData:「ユーザーごと」のデータではないすべて。

LocalApplicationData:ユーザーごとの非ローミングデータ。たとえば、このマシンにのみ保存されることを確認したいすべてのもの(マシンアクティベーションコード、多くの場合、キャッシュ/一時データも)。標準の一時ファイルはここにあります。

MyDocuments:ユーザーが実際に「認識可能な単一のドキュメント」として識別するユーザーデータ。

ファイル名を気にしない場合は、tempfileAPIを使用してtempディレクトリに一時ファイルを生成することもできます。これを手動で行うべきではありません。たとえば、.NETではPath.GetTempFileName()、その目的に使用できます。

于 2009-10-12T18:34:00.183 に答える
10

Windows 7クライアントソフトウェアロゴプログラムから:

  • アプリケーションは、デフォルトでProgramFilesフォルダーにインストールする必要があります。ネイティブ32ビットおよび64ビットアプリケーションの場合は%ProgramFiles%、x64で実行されている32ビットアプリケーションの場合は%ProgramFiles(x86)%が相互に上書きするため、ユーザーデータまたはアプリケーションデータをこの場所に保存しないでください。データと設定。
  • コンピューター上のユーザー間で共有する必要のあるすべてのアプリケーションデータは、ProgramData内に保存する必要があります
  • 特定のユーザー専用で、コンピューターの他のユーザーと共有されないすべてのアプリケーションデータは、Users\\AppDataに保存する必要があります
  • 「Windows」ディレクトリやサブディレクトリに直接書き込むことは絶対にしないでください。フォントやドライバーなどのファイルをインストールするための正しい方法を使用する
  • 「マシンごとの」インストールでは、ユーザーデータは、インストール中ではなく、最初の実行時に書き込む必要があります。これは、インストール時にデータを保存するための正しいユーザーの場所がないためです。インストール後にマシンレベルでデフォルトの関連付け動作を変更しようとするアプリケーションの試みは失敗します。代わりに、デフォルトはユーザーごとのレベルで要求する必要があります。これにより、複数のユーザーが互いのデフォルトを上書きするのを防ぐことができます。
于 2009-10-12T18:44:47.620 に答える
1

AppDataは自動構成とプロファイルである必要があり、ドキュメントはユーザーが保存したファイルのみである必要があります。複数のシステムで役立つ可能性のあるものはすべてAppData/Roamingに配置し、その他(マシン固有)はAppData/LocalまたはLocalLowに配置します。一時ファイルの場合は、Tempディレクトリを使用します。

于 2009-10-12T18:20:57.027 に答える
1

一般に、Windowsのベストプラクティスは、適切な環境変数に従うことです。保持したい構成データは%APPDATA%に配置し、一時ファイルは%TEMP%に配置する必要があります。

これには、Windowsが物事を変更した場合にひどく壊れることがなく、人々が持つ可能性のある奇妙な構成を尊重するという利点があります。

また、「ドキュメント」はユーザーが作成したデータ専用であり、プロンプトの後にのみ使用する必要があるという他の回答にも同意します。

于 2009-10-12T18:25:25.553 に答える
0

さらに、パスを取得するには、SHGetFolderPathまたはSHGetKnownFolderPath(Vista +の場合)を使用する必要があります。これにより、現在のインストールのバージョンや言語に関係なく、現在のシステム上の正しい場所が提供されます。使用しているパスをハードコーディングしないでください。

于 2009-10-22T19:07:54.770 に答える