2

会員の皆様、こんにちは。

私は次の構造体を持っています:

public struct IncomeTax
{
    public string name, category;
    public int income;
} 

いいえと書いています。次のコードを使用して、そのような構造体 (レコード) をバイナリ形式でテキスト ファイルに変換します。

FileStream fs = new FileStream(Application.StartupPath + "\\Hello.txt", FileMode.Append, FileAccess.Write);

BinaryWriter bw = new BinaryWriter(fs);
bw.Write(it.name);
bw.Write(it.category);
bw.Write(it.income);
bw.close(); 

fs.close();

ここで、このファイルからレコードをランダムに読み取りたいとします。たとえば、3 番目のレコードに直接移動したいとします。BinaryReaderこれは&を使用して実行できることを知っていますFileStream.SeekFileStream.Seekしかし、レコードに直接移動する方法がわかりません。助けてください。

4

1 に答える 1

6

あなたが持っている構造ではできません - レコードはどんなサイズでもかまいません。任意のレコードをシークするには、固定サイズのレコードが必要です (これは、文字列と文字列のサイズに制限を設け、その制限よりも小さい場合はレコードに空のスペースを埋め込むことを意味します) )または、別のインデックスを作成する必要があります。これは基本的に、「レコード X は位置 Y から始まる」という固定サイズのレコードになります。namecategory

後者のアプローチでは、レコードの編集がトリッキーになることに注意してください。新しいバージョンが古いバージョンとまったく同じサイズでない限り、レコードをそのままにしておく必要がありますが、レコードの末尾にスペースを「浪費」するか、新しいバージョンを作成する必要があります。ファイルの最後に新しいレコード。

または、データベースを使用することもできますが、これはほぼ確実に優れたアイデアです。「組み込み」データベースにはさまざまな形式があります。つまり、クライアント サーバー構成は必要なく、データベース コンテンツ用のファイルが 1 つか 2 つあれば十分です。

于 2012-10-13T07:35:14.040 に答える