2013-03-28 136 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();  
}