2016-11-03 14 views
1

私はFortranでバイナリを読み込もうとしています。ファイルはc#で作成されます。FortranはC#のバイナリファイルを読み込みます

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コード:それだけ格納(作成されたファイルのサイズは8バイトであるので、私が想定4バイト)の整数する以下の私の例で

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コマンドが問題なく実行されます。デバッグモードでは、openiosが0で、inquire acc = 'STREAM'、ex = .true。、frm = 'UNFORMATTED'、irec = -1、namはファイルのフルパス、nr = 0 、op = .true。、p = 1、seq = 'YES'。同じ

私は最初のリード文IOS = -1のものに設定されていないファイルの終わりとnumMeasを示す実行し、2

は誰もがここで間違っているかを知っているんREAD文のために行きますか?すべてのヒントは非常に高く評価されています。私はヒントを検索しようとしましたが、間違っていることを見つけ出すことに成功していませんでした...

+0

Fortranのコードは私に似ています。整数を明示的に 'integer(int32)'に設定しようとする可能性がありますが、おそらくデフォルトの整数は既にそうです。 –

+0

私はまずファイルを書いて、それをfortranで読み直そうとします。正しいパスがあることは確かですか? – agentp

答えて

0

私の愚かな...デバッグ中に私はすべての検証、iostats、お問い合わせなどなしで最初に試しました。開いたステートメントにstatus='OLD'が含まれていなかったため、../../(基本プロジェクトフォルダ)には0サイズのファイルが作成されていて、それは(/TestFortran/Debug/ディレクトリにあるはずだとは思っていなかった) あなたの時間を無駄に使ってくださったことを申し訳ありません。しかし、あなたの迅速な対応に感謝します。

関連する問題