我需要创建一个文件,其中某些部分是字符串(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并打开另一个只是为了写一个字节,因为BinaryStream.Write(string)
方法预先设置"长度"字段(在我的情况下是不需要的)或StreamWriter.Write(byte)
对字节值进行编码,而不是直接写入。
我的问题是:我可以使用另一个类,这样我只能创建一次FileStream,并一个接一个地写我的字符串和我的字节吗?
答案 0 :(得分:3)
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
returns the string as Unicode characters,即.NET language for "UTF-16LE",每个字符为您提供两个字节。