将字符串和字节写入同一个 FileStream
Writing string and bytes to the same FileStream
我需要创建一个文件,其中一些部分是字符串 (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)
方法会在前面添加一个 "length" 字段(在我的情况下不需要)或StreamWriter.Write(byte)
编码字节值而不是直接写入。
我的问题是:是否有另一个 class 我可以使用,这样我就可以只创建一次 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
returns the string as Unicode characters, which is .NET language for "UTF-16LE",每个字符两个字节。
我需要创建一个文件,其中一些部分是字符串 (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)
方法会在前面添加一个 "length" 字段(在我的情况下不需要)或StreamWriter.Write(byte)
编码字节值而不是直接写入。
我的问题是:是否有另一个 class 我可以使用,这样我就可以只创建一次 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
returns the string as Unicode characters, which is .NET language for "UTF-16LE",每个字符两个字节。