Fortran Coder

查看: 10107|回复: 4
打印 上一主题 下一主题

[文件读写] 关于二进制文件读写的疑问?

[复制链接]

32

帖子

9

主题

0

精华

专家

F 币
391 元
贡献
212 点
跳转到指定楼层
楼主
发表于 2020-3-31 12:39:39 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这两天学习二进制文件读写
论坛上的帖子http://fcode.cn/guide-4-1.html帮助很大,其实对于二进制数据进行读写时可以采用的读写方式有两种直接读取(Access = 'Direct' )和顺序读取(Access = 'Sequential' )
于是采用两种不同的方法分别写入和读取数据并通过屏幕输出,结果两种方法完全一样。
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn      Implicit None
      Integer*4 :: iVar1 ,iVar2,iVar1M , iVar2M
      Real*4 :: rVar1 , rVar2,rVar1M , rVar2M
      Character(Len=16) :: cStr,cStrM

C         写二进制数据----------------------------------------------------
C          方法1 直接写入文件(Access = 'Direct' )
            Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , 
     &    Form = 'Unformatted' , RecL = 4 )
          Write( 12 , Rec = 1 ) 271 , 783 , 2581.192_4 , 1.6892716E-07
          Write( 12 , Rec = 2 ) "ABCDEFGHIGKLMNOP"
          Close( 12 )

C            方法2 顺序写入文件(Access = 'Sequential' )写入
             Open( 14 , File = 'TestBin2.Bin' ,Access = 'Sequential' ,
     &      Form = 'Unformatted' )
            Write(14) 271 , 783 , 2581.192_4 , 1.6892716E-07
            Write(14) "ABCDEFGHIGKLMNOP"
            Close(14 )

C          读二进制文件------------------------------------------------------
c          ****读二进制文件(Access = 'Direct' )
           Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , 
     &   Form = 'Unformatted' , RecL = 4 )
           Read( 12 , Rec = 1) iVar1 , iVar2 , rVar1 , rVar2
           Read( 12 , Rec = 2) cStr
           Write(* , * ) iVar1 , iVar2 , rVar1 , rVar2
           Write(* , * ) cStr
           Close( 12 )

c            ****读二进制文件(Access = 'Sequential' )
            Open( 14 , File = 'TestBin2.Bin',form='Unformatted', 
     &    Access = 'Sequential')
            Read( 14 ) iVar1M , iVar2M , rVar1M , rVar2M
            Read( 14 ) cStrM
            Write(* , * ) iVar1M , iVar2M , rVar1M , rVar2M
            Write(* , * ) cStrM
            Close( 14 )

      End Program www_fcode_cn
      
     但存在的问题是用vs2010查看两种方法生成的二进制文件testBin.Bin和testBin2.Bin的内容是不完全相同的,可以参考附件中的图片testBin.jig和testBin2.jig,具体而言就是在利用(Access = 'Sequential' )顺序写入二进制数据的testBin2_picture.jig中多了一些表示行起始和行结束的数值符号代码:如图中 10 00 00 00,由于顺序写入时两次调用了write函数写入了两行数据,所有共有 2行*(行起始标号代码+行结束标号代码)=4组10 00 00 00 数值代码,分别出现在第一行和第二行的开始和结束的位置。
    请问有没有办法在直接法(Access = 'Direct' )写入二进制数据时也在行开始和行结束的位置加入行开始和行结束标号代码如(10 00 00 00),从而可以实现利用顺序法(Access = 'Sequential' )一次读入一行数据呢?如果可以加入,又怎么实现呢?
    先感谢了!!

testBin.JPG (11.56 KB, 下载次数: 210)

testBin.jig

testBin.jig

testBin2.JPG (34.17 KB, 下载次数: 221)

testBin2.jig

testBin2.jig
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

32

帖子

9

主题

0

精华

专家

F 币
391 元
贡献
212 点
沙发
 楼主| 发表于 2020-3-31 15:00:41 | 显示全部楼层
本帖最后由 xuanyz 于 2020-3-31 17:13 编辑

感谢fcode提醒,又仔细看了这篇文章,明白了部分,似乎应该是"行使用回车和换行符间隔",但回车和换行符又怎么输入呢?

32

帖子

9

主题

0

精华

专家

F 币
391 元
贡献
212 点
板凳
 楼主| 发表于 2020-4-1 10:29:53 | 显示全部楼层
感谢感谢fcode,这下全明白了,再次感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 03:35

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表