C#BinaryWrite将空值添加到文件中

时间:2014-08-18 13:19:38

标签: c# file-io

我在字节数组中有一些数据,这些数据是必须写入文件的字符。该文件是另一个工具的输入,因此格式必须符合规定。

应该出现在文件中的格式如下所示     2 1 1 1 1 1 1 1 1 1 T     0     3 1     12     1 1 1 F.     14 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);
        }
    }
}

如果我现在用Hex编辑器打开文件,那么在我写入的字节中的数据前面会有额外的空值。

EG。 00 00 32 20 00 00 31 20 00 00 31 20 00 00 31 20

为什么当第一个字节包含2时出现前两个空值(00 00),它出现在数据的第三位(32)?下一个数据是旁边正确显示的空格(20),但之后还有另一对空值。有没有办法阻止将空值写入文件?

3 个答案:

答案 0 :(得分:0)

这看起来很复杂。你为什么不这么做:

File.WriteAllBytes(filename, covData);

答案 1 :(得分:0)

你应该将它全部读入字节数组,然后我建议使用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

答案 2 :(得分:0)

我不确定我究竟究竟为什么发生这个问题只是过滤缓冲区数组,就像下面删除了额外的空值一样。

if (b != default(Byte))
{
    Console.WriteLine((byte)b);
    bw.Write(b);
}