2013-03-28 183 views
1

我在FORTRAN寫入二進制文件,下面的代碼:讀取和寫入二進制文件,Fortran和C++

Character(50) S 
Real*8 A 
A = 25.002 
OPEN(1,file='data.bin', access='stream',action='write') 
WRITE (1) A   
CLOSE(1) 

,並試圖讀取與C++下面的代碼:

ifstream::pos_type size; 
char * memblock 

ifstream file ("data.bin", ios::in|ios::binary|ios::ate); 
if (file.is_open()) 
{ 
    size = file.tellg(); 
    memblock = new char [size]; 
    file.seekg (0, ios::beg); 
    file.read (memblock, size); 
    file.close(); 

    delete[] memblock; 
} 

但它不起作用!第二個代碼無法讀取第一個代碼創建的文件。 任何幫助表示讚賞!

+0

你怎麼知道它無法讀取文件?您所顯示的代碼中甚至沒有檢查。 –

+1

「它不起作用」沒有定義問題。如何不工作是必需的。此外,你沒有任何錯誤檢查你的'新字符'也沒有在你的file.read(所以你不知道它爲什麼失敗) – KevinDTimm

+1

它不工作,因爲它不讀取任何數據,或者它不工作,因爲它不會讀取您期望的數據。幫助我們!更多信息!減少驚歎號! – john

回答

1

file.tellg給出當前位置。當您打開文件時,位置爲0.要罰款文件的大小,請先查找結尾,然後執行tellg。

1

問題就迎刃而解了:

ifstream file ("data.bin", ios::in|ios::binary); 
if (file.is_open()) 
{  
    double a = 0; 
    file.read ((char*)&a,sizeof(double)); 
    file.close();  
}