怎样用二进制文件方式写入double类型的数

szetosaya 2012-10-16 05:24:13
要求:用二进制文件方式写入100个double类型的数,并能够按照指定序号(位置)读取这个数
我现有程序是
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace 二进制文件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "数据类型(*.dat)|*dat|所有文件(*.*)|*.*";
if(saveFileDialog1.ShowDialog()==DialogResult.OK )
{
string Binarysavefilepath=this .saveFileDialog1 .FileName ;
if(File.Exists (Binarysavefilepath))
File .Delete(Binarysavefilepath);
FileStream fs =File .OpenWrite(Binarysavefilepath );
BinaryWriter bw=new BinaryWriter(fs,Encoding .Default );
bw.Write (richTextBox1 .Text );
bw.Close ();
fs.Close ();
MessageBox.Show ("写入文件成功!");
}
}

private void button2_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "数据类型(*.dat)|*dat|所有文件(*.*)|*.*";
if(openFileDialog1.ShowDialog()==DialogResult.OK )
{
string Binaryopenfilepath=this .openFileDialog1 .FileName ;
FileStream fs =File .OpenRead(Binaryopenfilepath );
BinaryReader br=new BinaryReader (fs,Encoding .Default );
richTextBox1.Text = br.ReadString();
br.Close ();
fs.Close ();
}

}

private void button3_Click(object sender, EventArgs e)
{
int location = Convert .ToInt32(textBox1 .Text);
if (openFileDialog1 .ShowDialog () == DialogResult .OK)
{
string path = this .openFileDialog1 .FileName ;
FileStream fs = File .OpenRead (path );
BinaryReader br = new BinaryReader (fs ,Encoding .Default );
fs.Seek(location ,SeekOrigin .Begin);
richTextBox1 .Text = br .ReadChar ().ToString ();
br.Close();
fs.Close ();
}
}
}
}

请问我怎样改才能写入double类型的数
...全文
202 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-10-16
  • 打赏
  • 举报
回复
你的程序里面,输入来自外部控件,这叫我怎么改?明明说是100个double,你却用richTextBox1.Text,那么这个Text到底里面是什么内容?
如果你建立一个double数组double[100],这我倒是可以给你改改,但是你用的string类型的输入,叫我怎么下手?
szetosaya 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
double是八字节的一个数,因此必须按照4字节一个单位写入并读取它,至于将double转换到byte[],很简单,直接用指针就完事了。

C# code

public static unsafe byte[] DoubleToBytes(double value)
{
byte[] returnvalue = new byte……
[/Quote]
能不能直接在我的程序上改一下?
qldsrx 2012-10-16
  • 打赏
  • 举报
回复
double是八字节的一个数,因此必须按照4字节一个单位写入并读取它,至于将double转换到byte[],很简单,直接用指针就完事了。
        public static unsafe byte[] DoubleToBytes(double value)
{
byte[] returnvalue = new byte[8];
byte* tmp = (byte*)&value;
for (int i = 0; i < 8; i++, tmp++)
{
returnvalue[i] = *tmp;
}
return returnvalue;
}


读取用BitConverter.ToDouble方法即可。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧