0

一部の部分が文字列 (utf-8) で、一部の部分がバイトであるファイルを作成する必要があります。

StreamWriterとを何時間もいじりましBinaryWriterたが、これが機能する唯一のものです。

        using (var stream = new FileStream(_caminho, FileMode.Create, FileAccess.Write))
        {
            using (var writer = new StreamWriter(stream))
            {
                writer.Write(myString);
            }   
        }
        using (var stream = new FileStream(_caminho, FileMode.Append, FileAccess.Write))
        {
            using (var writer = new BinaryWriter(stream))
            {
                writer.Write(oneSingleByte);
            }
        }

BinaryStream.Write(string)問題は、メソッドが「長さ」フィールドを先頭に追加するか (私の場合は望ましくない)、StreamWriter.Write(byte)実際に直接書き込む代わりにバイト値をエンコードするため、FileStream を閉じて別のものを開く必要があることです。

私の質問は次のとおりです。 FileStream を一度だけ作成し、文字列とバイトを次々に書き込むために使用できる別のクラスはありますか?

4

1 に答える 1

4

BinaryWriter書き込まれたデータBinaryReaderを読み取ることができるようにプレフィックスを付けます。これらの接頭辞がなければ、ファイルを読み書きするときに何をしているのかを正確に把握する必要があります。

必要に応じて、両方のライターを省略してファイルに直接書き込むことができます。

using (var stream = new FileStream(_caminho, FileMode.Append, FileAccess.Write))
{
    stream.WriteByte('0'); 
    WriteString(stream, "foo", Encoding.UTF8);
}

private void WriteString(Stream stream, string stringToWrite, Encoding encoding)
{
    var charBuffer = encoding.GetBytes(stringToWrite);
    stream.Write(charBuffer, 0, charBuffer.Length);
}

"UTF-16LE" の .NET 言語であるString.ToByteArrayUnicode characters として文字列を返すため、バイトを取得するにはエンコーディングを明示的に指定する必要があります。1 文字あたり 2 バイトが得られます。

于 2015-04-07T21:30:06.493 に答える