【问题标题】:Binary Reading of Bytes Returning only One Value. C#只返回一个值的字节的二进制读取。 C#
【发布时间】:2015-06-27 14:49:20
【问题描述】:

当我期待 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?我怎样才能让它显示我需要的东西?另外,为什么当我使用字节以外的东西时它会起作用,比如字符串或整数。

【问题讨论】:

    标签: c# arrays fileparsing


    【解决方案1】:

    因为您正在向文件写入整数,并且前 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);
            }
        }
    

    试试看。

    【讨论】:

    • 感谢您的解决方案有效,但 Shar1er80 告诉我为什么它首先会搞砸。
    • 他解释得更好,但我也说明了原因(在代码上方)。 .Write 是一个重载,.NET 中的默认数字类型是整数(除非它有小数点,否则它是双精度数)。原始代码中的每次写入都写入 4 个字节,因此您有一个 16 字节的文件,而不是一个 4 字节的文件。如果您以后遇到这些问题,请尝试在 Hex 编辑器中打开文件。
    【解决方案2】:

    当您写入数据文件时:

        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)。在您的 write 方法中,将您的值转换为一个字节,您将获得预期的结果。

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

    【讨论】:

    • 哦。非常感谢。在文件读/写和数据类型方面,我有很多东西要学。
    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多