7

ArrayList を使用して可変数の文字列を格納しようとしていますが、ArrayList とその要素を保存して、Windows フォームがプログラムの読み込みと終了の間に値を呼び出せるようにする方法を知りたいです。

以前は情報をテキスト ファイルに保存していましたが、可能であれば外部ファイルは避けたいと考えています。

ご協力いただきありがとうございます。

4

4 に答える 4

7

Properties.Settingsを使用して ArrayList を保存できます (ArrayList でない場合、それらは他の同等のクラスです) 。最良の部分は、アプリケーションおよびユーザーレベルで変数を設定できることです。

ここで非常に良い例を見つけることができます

于 2012-07-30T12:57:20.063 に答える
2

私はいつも(Winformsの場合はその音から)、事前に作成したProperties.Settings変数に保存するForm_Closingを使用してきました。ArrayList の場合は、XML またはカンマ区切りのリストに格納できます。シリアル化/逆シリアル化の方法は、データによって異なります。

于 2012-07-30T12:58:48.517 に答える
1

以前は情報をテキスト ファイルに保存していましたが、可能であれば外部ファイルは避けたいと考えています。

必然的に実行間でデータを保存するには、プログラムの実行可能ファイルの外部に何かが必要になります。

レジストリは機能しますが、レジストリは少量の情報を保存するのには適していません。ファイルを追加するデータベースを使用できます。

テキスト文字列の場合、テキスト ファイル (1 行に1つの文字列 1 ) を 1つのステートメントで保存およびロードできます。ファイルを分離ストレージまたは %AppData% の専用フォルダーに配置すると、ユーザーがファイルを台無しにする可能性が制限されます。2 .

// Load
var theStrings = new ArrayList();
var path = GetSavePath();
if (File.Exists(path)) {
  theStrings.AddRange(File.ReadLines(path);
}

// Save:
File.WriteAllLines(GetSavePath(), theStrings.ToArray());

ここではToArray()as の使用ArrayListは実装されていませんIEnumerable<String>(List<String>コレクションにはより良い選択であり、これは避けてください)。


1これは、行末が文字列内で無効であることを前提としています。これをサポートする必要がある場合は、いくつかのオプションがあります。別のメカニズムで文字列を分離するファイル形式、またはおそらく最も簡単な方法は、単純な変換で文字をエスケープすることです (例: \\\、改行 → 、改行\n\r)。

2これを防ぐには、サービスのようなものを使用して別のユーザーとしてロード/保存し、ACL によってデータを保護できるようにする必要があります。

于 2012-07-30T13:14:40.017 に答える
1

分離ストレージをご覧ください。

于 2012-07-30T12:58:18.407 に答える