Fortran从C#中读取二进制文件

时间:2016-11-03 15:17:50

标签: c# io fortran binaryfiles

我正在尝试阅读fortran中的二进制文件。该文件在c#中创建。 在我下面的例子中,它只存储到整数(我假设4字节,因为创建的文件大小是8字节):

string binfile = @"c:\..\bindata.dat";
int nrecs = 60*60*24*61;
int nvalues = 34;

using (BinaryWriter bw = new BinaryWriter(File.Open(binfile, FileMode.Create)))
      {
        bw.Write(nrecs);
        bw.Write(nValues);        
      }

读取数据的fortran代码:

program TestFortran

    implicit none

    ! Variables
    character(*),parameter      ::  fn = "bindata.dat"
    integer                     ::  numMeas,numVals
    integer                     ::  infile,ios
    character(len=11)           ::   acc, seq, frm
    character(len=128)          ::  nam
    logical                     ::  ex,op
    integer                     :: irec, nr,p
    ! Body of TestFortran
    print *, 'Hello World'
    infile = 10
    open(unit = infile,file = fn,status='OLD',access='STREAM',FORM='UNFORMATTED',action='READ',iostat=ios)
    inquire(infile,err=99,exist=ex,opened=op,name=nam,access=acc,&
      sequential= seq, form = frm, recl=irec, nextrec=nr,pos=p)
    read(infile,IOSTAT=ios)  numMeas
    read(infile,IOSTAT=ios)  numVals
99  close(infile)
    write(*,'(a,i8,a,i6)')  "Number of measurements = ", numMeas, ", and number of values in a measurement = ", numVals

end program TestFortran

openinquire命令运行没有问题。在调试模式下,它报告open ios为0后inquire acc =' STREAM',ex = .true。,frm =' UNFORMATTED',irec = -1,nam是文件的完整路径,nr = 0,op = .true。,p = 1和seq =' YES'。

当我运行第一个读取语句时,ios = -1表示文件结束,而numMeas没有设置为任何内容,读取语句2也是如此。

有谁知道这里有什么问题吗?每个提示都非常感激。我试图寻找提示,但没有成功找出问题所在......

1 个答案:

答案 0 :(得分:0)

我这么傻......在调试过程中,我首先尝试了没有所有验证,iostats,查询等等。我还没有在开放语句中包含status='OLD',其中一个0大小的文件已经在../../(基础项目文件夹)中创建,而不是我认为应该存在的位置(在/TestFortran/Debug/目录中)。 对不起,你们白白浪费时间。但感谢您的快速回复。