C#对二进制文件的特定位置进行读写小结

虽然网络上对“C#对二进制文件进行读写”的文章如汗牛充栋,但具体到自己要处理的问题时,难免让人产生“书到用时方恨少”和“纸上读来终觉浅”的感觉,最终理解还是要靠自己动手才能丰衣足食。

实例一:将数值写入文件的特定位置

    String saveFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要保存的文件
    FileStream writeStream = File.OpenWrite(saveFile);// 以写的方式打开

    int value = 123456;// 要写入的数值
    String strAll = value.ToString("x8");// 转成16进制
    // 下面是特定处理,个性化需求,不完善勿怪
    String strA = strAll.Substring(strAll.Length - 2, 2);
    String strB = strAll.Substring(strAll.Length - 4, 2);
    String strC = strAll.Substring(strAll.Length - 6, 2);

    byte[] newData = new byte[3];
    newData[0] = Convert.ToByte(strA, 16);
    newData[1] = Convert.ToByte(strB, 16);
    newData[2] = Convert.ToByte(strC, 16);

    writeStream.Seek(44, SeekOrigin.Begin);// 定位,在第44个字节处写入
    writeStream.Write(newData, 0, newData.Length);// 将准备好的数组写入文件。newData是包含要写入文件的byte类型数组;0是数组中的从零开始的字节偏移量,从此处开始将字节复制到该流;newData.Length是要写入的字节数。这句话的意思是从44个字节开始把数组内容从头到尾写进去,修改下参数如writeStream.Write(newData, 1, newData.Length-1)是把数组从第二个到倒数第一个写进去
    writeStream.Close();// 关闭文件

实例二:读取文件的特定位置,得到数值

    String openFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要读取的文件
    FileStream fs = new FileStream(openFile, FileMode.Open);// 读取方式打开,得到流
    fs.Seek(44, SeekOrigin.Begin);// 定位到第44个字节

    byte[] datas = new byte[3];// 要读取的内容会放到这个数组里
    fs.Read(datas, 0, datas.Length);// 开始读取,读取的内容放到datas数组里,0是从第一个开始放,datas.length是最多允许放多少个
  // 下面是个性化处理,不完善勿怪
    int a = datas[2];
    String strA = Convert.ToString(a, 16);
    if (strA.Equals(""))
    {
        strA = "00";
    }
    if (strA.Length == 1)
    {
        strA = "0" + strA;
    }

    a = datas[1];
    String strB = Convert.ToString(a, 16);
    if (strB.Equals(""))
    {
        strB = "00";
    }
    if (strB.Length == 1)
    {
        strB = "0" + strB;
    }

    a = datas[0];
    String strC = Convert.ToString(a, 16);
    if (strC.Equals(""))
    {
        strC = "00";
    }
    if (strC.Length == 1)
    {
        strC = "0" + strC;
    }

    String strD = strA + strB + strC;

    int point = Convert.ToInt32(strD, 16);// 十六进制转十进制
    System.Console.WriteLine("value=" + point);// 这里输出value=123456,也就是上面写入程序写进去的值

2017年6月13日11:43:46

时间: 2024-10-22 15:02:07

C#对二进制文件的特定位置进行读写小结的相关文章

使用shell脚本简单模拟对特定文件同时读写操作

使用shell脚本简单模拟对特定文件同时读写操作文件内容的格式:field1    ,       field2    , field3    ,       field4以,为分隔符,但是存在空格. 脚本用法如下: ./check_write_read.sh 10 输出结果: Thu Apr 27 19:59:44 CST 2017:Read operation finished 670 Thu Apr 27 19:59:44 CST 2017:Write operation finished

使用iframe调用指定网页的特定位置(显示目标网页某区域的我想要的内容)

使用iframe调用指定网页的特定位置(显示目标网页某区域的我想要的内容) 有些时候我们并不需要显示iframe标签属性src指定的目标网页的所有内容,往往只需要显示某一特定区域.现有两种实现方法提供,但严禁使用此方法用于欺骗.隐瞒目的. 这里用到了Iframe的一些属性,稍微介绍下:       1. marginheight 属性规定框架内容与框架的上方和下方之间的高度,以像素计.       2. maiginweidth 属性规定框架内容与框架的左侧和右侧之间的高度,以像素计.     

类 RandomAccessFile 在文件任意位置进行读写

public class RandomAccessFile extends Object implements DataOutput, DataInput, Closeable 此类同时实现了DataOutput和DataInput接口,此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引,称为文件指针:输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针.如果随机访问文件以读取/写入模式创建,则

用StringBuffer替换特定位置字符

import java.util.*;public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ StringBuffer s=new StringBuffer(); s.append(sc.nextLine()); if(s.length()>=1&&s.length()<=10) {

windbg脚本实践1----监控特定文件创建 删除 读写

windbg脚本方便灵活,但是语法古怪,使用的人不多.windbg扩展功能强大,但是使用的人也很少.抛砖引玉吧. 此脚本可以监控到 a 任意时机 开关机时刻  (挂shutdown 删文件 或者开机挂回调特定时刻删文件) b 任意底层穿透驱动  bapidrv  tsyskit  kisapi pchunter  对文件进行的删除 创建 粉碎等敏感操作 $$***************************************************************** $$ S

Js+Css实现鼠标悬浮在特定位置,显示提示信息

想实现的效果就是数据悬浮在“?”上时出现一个div,有一个解释说明,实现效果如下: 1.首先实现“?”样式,在网址http://fontawesome.dashgame.com/ 上下载文件.解压后找到css文件夹下font-awesome.min.css 在html页面进行引用 <link href="/static/font/css/font-awesome.min.css" rel="stylesheet" /> html代码 <i clas

15周《C++语言基础》程序阅读——二进制文件及文件的随机读写(1)

1.阅读并运行下面的两个程序,分别用记事本和二进制文件阅读器(请自行下载Binary Viewer等程序,或者用DOS中的Debug程序,并百度其用法).查看其内容,并理解文件存储的原理. (1) <code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Cod

js数组特定位置元素置空,非null和undefined,实现echarts现状图效果;谷歌格式化压缩js代码

一.想要实现eCharts线状图表的断点效果,如图 这种效果,在设置数据的时候应该是这样: data:[, 2, 3, , 5, 6, 7]:但是想要动态添加数据,实现方式有两种 1.拼接字符串法:var str='[, 2, 3, , 5, 6, 7]';var arr=eval(str); 2.改变数组长度法: var arr=[]; for(var i=1;i<8;i++){ if(i==1||i==4){ arr.length=arr.length+1; continue; }arr.p

UItableView滚动到特定位置

如果在reloadData后需要立即获取tableview的cell.高度,或者需要滚动tableview,那么,直接在reloadData后执行代码是有可能出问题的. reloadDate并不会等待tableview更新结束后才返回,而是立即返回,然后去计算表高度,获取cell等. 如果表中的数据非常大,在一个run loop周期没执行完,这时,需要tableview视图数据的操作就会出问题了. apple并没有直接提供reloadData的api,想要程序延迟到reloadData结束在操作