将字符串和字节写入同一个FileStream



我需要创建一个文件,其中一些部分是字符串(utf-8),而一些部分是字节。

我用StreamWriterBinaryWriter修改了几个小时,但这是唯一有效的东西:

        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);
            }
        }

问题是,我必须关闭FileStream并打开另一个FileStream才能写入一个字节,因为要么BinaryStream.Write(string)方法预先准备了一个"长度"字段(在我的情况下不需要),要么StreamWriter.Write(byte)对字节值进行编码,而不是直接写入。

我的问题是:有没有其他类可以让我只创建一次FileStream,然后一个接一个地写我的字符串和字节?

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);
}

您需要显式指定获取字节的编码,因为String.ToByteArray以Unicode字符的形式返回字符串,这是"UTF-16LE"的.NET语言,每个字符提供两个字节。

最新更新