c# BinaryWrite向文件添加空值
本文关键字:添加 空值 文件 BinaryWrite | 更新日期: 2023-09-27 18:18:34
我在字节数组中有一些数据,这些数据是必须写入文件的字符。该文件是另一个工具的输入,因此格式必须与指定的一致。
文件中应该出现的格式如下所示2 1 1 1 1 1 1 1 1 1 1 t03个11211 11 f14 12 T
我用下面的代码写一个字节数组到文件。代码中的covData是一个字节数组。
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write))
{
using (BinaryWriter bw = new BinaryWriter(fs, Encoding.UTF8))
{
foreach (byte b in covData)
{
Console.Write((char)b);
bw.Write(b);
}
}
}
如果我现在用十六进制编辑器打开文件,在我正在写入的字节中的数据前面有额外的空。
。00 00 32 20 000 000 31 20 000 000 31 20 000 000 31 20
为什么当第一个字节包含2时出现前两个空(00 00),这是第三位数据(32)?下一个数据是一个空间(20)正确地出现在它旁边,但之后还有另一对null。是否有一种方法可以阻止将null写入文件?
这看起来很复杂。你为什么不直接写:
File.WriteAllBytes(filename, covData);
您应该将其全部读入字节数组,然后我建议使用MemoryStream
来解压缩它。
byte[] compressedBytes = File.ReadAllBytes(filename);
using (var mstrm = new MemoryStream(compressedBytes))
{
using(var inStream = new GzipStream(mstrm, CompressionMode.Decompress))
{
using (var outStream = File.Create("outputfilename"))
{
var buffer = new byte[BufferSize];
int bytesRead;
while ((bytesRead = inStream.Read(buffer, 0, BufferSize)) != 0)
{
outStream.Write(buffer, 0, bytesRead);
}
}
}
}
代码取自:Create new FileStream out of a byte array
不确定我完全理解为什么这个问题发生了,但过滤缓冲区数组,像下面摆脱了额外的null。
if (b != default(Byte))
{
Console.WriteLine((byte)b);
bw.Write(b);
}