字节的二进制读取只返回一个值。 C#
Binary Reading of Bytes Returning only One Value. C#
当我期望 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?我怎样才能让它显示我需要的东西?另外,为什么当我使用字节以外的东西时它会起作用,比如字符串或整数。
因为你正在向文件中写入整数并且前 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)。在您的 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);
}
}
当我期望 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?我怎样才能让它显示我需要的东西?另外,为什么当我使用字节以外的东西时它会起作用,比如字符串或整数。
因为你正在向文件中写入整数并且前 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)。在您的 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);
}
}