Двоичное чтение байтов, возвращающее только одно значение. C#
Консоль отображает 0,0,0,0, когда я ожидаю 0,1,2,3.
Это модифицированная версия: 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 ответа
Решение
Потому что вы записываете в файл целые числа, а первые 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);
}
}
Попробуй это.
Когда вы пишете в свой файл данных:
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);
}
}