4

FileStreamを使用してファイルに書き込もうとしていますが、2行目を書き込んでから、最初の行を書き込みたいと考えています。2行目を書き込んだ後、Seek()を使用して最初に戻り、最初の行を書き込みます。2行目(または1行目の長さによってはその一部)を置き換えます。2行目を置き換えないようにするにはどうすればよいですか。

        var fs = new FileStream("my.txt", FileMode.Create);
        byte[] stringToWrite = Encoding.UTF8.GetBytes("string that should be in the end");
        byte[] stringToWrite2 = Encoding.UTF8.GetBytes("first string\n");
        fs.Write(stringToWrite, 0, stringToWrite.Length);
        fs.Seek(0, SeekOrigin.Begin);
        fs.Write(stringToWrite2, 0, stringToWrite2.Length);

以下がファイルに書き込まれます。

first string
hould be in the end

なりたい

first string
string that should be in the end

ありがとう

4

3 に答える 3

4

最初に、最初の文字列の長さに等しいファイルを探す必要があります。

fs.Seek(stringToWrite2.Length, SeekOrigin.Begin);
fs.Write(stringToWrite, 0, stringToWrite.Length);
fs.Seek(0, SeekOrigin.Begin);

また、ストリームを破棄することを忘れないでください(using)。

于 2011-04-17T10:08:12.337 に答える
3

ファイルに挿入して既存のコンテンツをプッシュバックすることはできません。上書きまたは拡張のみが可能です。

したがって、その前にあるすべての内容を理解するまで、ファイルの一部を書き込むことはできません。

于 2011-04-17T10:14:33.257 に答える
2

達成しようとしていることによっては、2つの異なるファイルに書き込む必要がある場合があります。1つは一時ファイルです。

  1. 「2番目の」コンテンツを含む一時ファイルを作成する
  2. 「最初の」コンテンツで新しいファイルを作成します
  3. 最初のファイルを開き、その内容を読んで、2番目のファイルに追加します

これがより大きなソリューションで繰り返し発生する要件である場合、おそらく必要なのはある種のデータベースですか?たぶん、 SqlLiteBerkeleyDbのようなファイルベースのデータベースです。

同様の問題がここで説明されています。

于 2011-04-17T10:19:17.323 に答える