字节的二进制读取只返回一个值。 C#

时间:2015-04-20 18:12:25

标签: c# arrays fileparsing

当我期待0,1,2,3时,控制台显示0,0,0,0。

这是https://msdn.microsoft.com/en-us/library/system.io.binarywriter(v=vs.110).aspx

的修改版本
using System;
using System.IO;

namespace testingfilereadwrite
{    
class Program
{
    const string FileName = "TestFile.dat";       
static void Main()
    {
        WriteDefaultValues();
        DisplayValues();
        Console.ReadKey();
    }        
public static void WriteDefaultValues()
    {
        using (BinaryWriter writer = new BinaryWriter(File.Open(FileName, FileMode.Create)))
        {
            writer.Write(0);
            writer.Write(1);
            writer.Write(2);
            writer.Write(3);
        }
    }

    public static void DisplayValues()
    {
        byte byte1;
        byte byte2;
        byte byte3;
        byte byte4;

        if (File.Exists(FileName))
        {
            using (BinaryReader reader = new BinaryReader(File.Open(FileName, FileMode.Open)))
            {
                byte1 = reader.ReadByte();
                byte2 = reader.ReadByte();
                byte3 = reader.ReadByte();
                byte4 = reader.ReadByte();
            }

            Console.WriteLine(byte1);
            Console.WriteLine(byte2);
            Console.WriteLine(byte3);
            Console.WriteLine(byte4);
        }
    }
}`

为什么只显示0?如何让它显示我需要的东西?另外,为什么当我使用字节之外的其他东西时,如string或int。

2 个答案:

答案 0 :(得分:6)

因为您正在向文件写入整数,前4个字节为0。

    public static void WriteDefaultValues()
    {
        using (BinaryWriter writer = new BinaryWriter(File.Open(FileName, FileMode.Create)))
        {
            writer.Write((byte)0);
            writer.Write((byte)1);
            writer.Write((byte)2);
            writer.Write((byte)3);
        }
    }

试试。

答案 1 :(得分:5)

当您写入数据文件时:

    public static void WriteDefaultValues()
    {
        using (BinaryWriter writer = new BinaryWriter(File.Open(FileName, FileMode.Create)))
        {
            writer.Write(0);
            writer.Write(1);
            writer.Write(2);
            writer.Write(3);
        }
    }

您实际上正在为文件写一个整数(4个字节)。

因此,当您阅读时,您会读取文件的前4个字节,这是您写的零(0x00,0x00,0x00,0x00)。在您的写入方法中,将您的值转换为一个字节,您将获得预期的结果。

    public static void WriteDefaultValues()
    {
        using (BinaryWriter writer = new BinaryWriter(File.Open(FileName, FileMode.Create)))
        {
            writer.Write((byte)0);
            writer.Write((byte)1);
            writer.Write((byte)2);
            writer.Write((byte)3);
        }
    }