web-dev-qa-db-ja.com

アプリケーションと共に展開する読み取り専用データをどのように保存すればよいですか?

デスクトップアプリケーションを開発しています。このアプリケーションを実行するにはいくつかの情報が必要ですが、この情報は変更されません(データmustはアプリの実行ごとに読み込まれますが、データはis never changed)。データは、アプリが実行されているのと同じコンピューターに保存する必要があります(クライアント側のストレージ?)。

また、ユーザーがこの情報を簡単に変更できない場合(ITに関する知識があまりないと仮定します)も適しています。

この種の情報をどのように保存すればよいですか?ローカルデータベース?アプリケーションと一緒に送信されるXML?

WPFを使用しています。

17
appa yip yip

バイナリファイルは明白な答えですが、それをロードする方法に依存します-可能であれば、自分の生活を楽にすることもできます。

これを読むためのC#の組み込みメソッドがあるので、XMLは良い選択かもしれません。 checksum をデータに追加すると、ユーザーが変更した場合、チェックサムが一致しなくなります(チェックサムが有効であることを確認するためにチェックを追加する必要があります)

アクセスできるようにする必要がある他の依存関係があるため、ローカルデータベースはさらに問題を引き起こす可能性があります

14
Matt Wilko

データが変更されず、読み取り専用である場合の場合、定数のリストとしてコードファイルに挿入します。

public readonly string AppStartUpData = "MyAppNeedsThis";

このデータがデプロイメントごとに異なる場合は、外部ファイルで問題ありません。

.Netには組み込みの.configファイル(App.Config)が付属しています。それらから情報を読み取るための標準的な方法(フレームワークに組み込まれている)があるため、これらを使用する必要があります。

構成ファイルはテキストファイル(Xml)なので、設定を変更する必要がある場合(絶対に絶対に言わないでください)に使用してください。機密情報がある場合は、必要に応じて設定を暗号化できます。

21
Jon Raynor

いつでもファイルをプロジェクトに追加し、そのビルドタイプをEmbedded Resourceに設定して、アプリケーション自体に直接埋め込まれるようにすることができます。

または、暗号化されてアクセス可能な場所に配置されたファイル。

15
TheLethalCoder

ユーザーにデータをのぞいてもらいたくない場合は、データをバイナリデータファイルにシリアル化する必要があります。

アプリのみが、そこから読み取るチャンクの長さを認識します。

C#はわかりませんが、Javaでは、次のようにファイルを作成します。

FileOutputStream fos = new FileOutputStream(file);      
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(var1);
oos.writeObject(var2);
oos.writeObject(var3);
oos.writeObject(var4);

...そして彼らはこのようにそれを読みます:

FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o[] = new Object[4];
o[0] = ois.readObject();
o[1] = ois.readObject();
o[2] = ois.readObject();
o[3] = ois.readObject();
5