0

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

StreamWriter我用and修补了几个小时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);
            }
        }

问题是我必须关闭 FileStream 并打开另一个 FileStream 才能写入一个字节,因为该BinaryStream.Write(string)方法会预先添加一个“长度”字段(在我的情况下不需要),或者StreamWriter.Write(byte)编码字节值而不是实际直接写入。

我的问题是:我可以使用另一个类,以便我只能创建一次 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);
}

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

于 2015-04-07T21:30:06.493 回答