我需要创建一个文件,其中一些部分是字符串(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);
}
}
问题是,我必须关闭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语言,每个字符提供两个字节。