hel*_*ker 1 c# filestream streamwriter binarywriter
我需要创建一个文件,其中某些部分是字符串(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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我必须关闭 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);
}
Run Code Online (Sandbox Code Playgroud)
您需要显式指定获取字节的编码,因为String.ToByteArray将字符串返回为 Unicode 字符,这是“UTF-16LE”的 .NET 语言,为每个字符提供两个字节。
| 归档时间: |
|
| 查看次数: |
5447 次 |
| 最近记录: |