2016-10-24 22 views
1

我有一個寫入未格式化的直接訪問文件的Fortran代碼。問題是,大小和文件的內容,當我切換到不同的平臺變化:未格式化的直接訪問文件可移植性

  • 第一平臺是Windows(使用英特爾編譯程序的32位版本 - 2009全能版)

  • 第二個平臺是Linux(使用gfortran編譯器v4.9.0的64位版本的程序)。

不幸的是,在Linux中生成的文件無法從Windows讀取。 LINUX中的文件是5-6倍小。但是,寫入的記錄總數似乎是相同的。我用一個十六進制編輯器打開了這兩個文件,主要區別在於該文件的Windows版本中存在很多零。 有沒有辦法在LINUX中生成完全相同的文件?

如果有幫助,你可以在這裏找到這兩個文件:https://www.dropbox.com/sh/erjlf5sps40in0e/AAC4XEi-p4nnTNzhyai_ZCZVa?dl=0

我打開該文件的命令:OPEN(IAST,FILE=ASTFILR,ACCESS='DIRECT',FORM='UNFORMATTED',RECL=80)

我用命令寫: WRITE(IAST,REC=IRC) (SNGL(PHI(I)-REF), I=IBR,IER)

我用命令讀:READ(IAST,REC=IRC,ERR=999) (PHIS(I), I=1,ISTEP) 其中PHISREAL*4 array

+1

一個相關的例子http://stackoverflow.com/questions/8751185/fortran-無格式文件格式 –

+0

我建議使用流訪問來獲得最大的可移植性。 –

+0

非常感謝你,不幸的是我錯過了那篇文章。還有一個問題:對於一個給定的二進制文件,是否可以找到已寫入的RECL的值? – helios21

回答

1

問題默認情況下,英特爾Fortran指定RECL =以字爲單位,而GFortran使用字節。有一個英特爾Fortran編譯器選項可用於使其使用字節單位。在Linux上該選項

-assume byterecl 

的Windows我不知道語法是什麼,也許像

/assume:byterecl