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写入文件?

c# BinaryWrite向文件添加空值

这看起来很复杂。你为什么不直接写:

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);
}