fstream 的read 和 write解决思路
fstream 的read 和 write
我想用二进制的方式读写数据:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int a[999],b[999];
ofstream ofile;
ifstream ifile;
for(int i=0;i <999;i++) a[i]=i;
ofile.open( "c:\\file.data ");
ofile.write((char*)a,sizeof(int)*999);
ofile.close();
ifile.open( "c:\\file.data ");
ifile.read((char*)b,sizeof(int)*999);
for(int i=0;i <999;i++) cout < <b[i] < <endl;
system( "PAUSE ");
return EXIT_SUCCESS;
}
结果显示从的二十几个后就是混乱数字 而且有负数 我想可能是
write 和 read 不能一次执行太多数据 然后我修改了一下:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int a[999],b[999];
ifstream ifile;
ofstream ofile;
for(int i=0;i <999;i++) a[i]=i;
ofile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ofile.write((char*)(a + i),sizeof(int));
ofile.close();
ifile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ifile.read((char*)(b + i),sizeof(int));
for(int i=0;i <999;i++) cout < <b[i] < <endl;
system( "PAUSE ");
return EXIT_SUCCESS;
}
还是不对问题出在哪呢?
------解决方案--------------------
ifile.open( "c:\\file.data ");-> ifile.open( "c:\\file.data ",ios::binary);
ofile.open( "c:\\file.data ");-> ofile.open( "c:\\file.data ",ios::binary);
------解决方案--------------------
for(int i=0;i <999;i++)
ofile. < <a[i] < < " "; //空格分割数据
ofile.close();
ifile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ifile> > b[i]; //读取时候自动会跳过空格分割符号
我想用二进制的方式读写数据:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int a[999],b[999];
ofstream ofile;
ifstream ifile;
for(int i=0;i <999;i++) a[i]=i;
ofile.open( "c:\\file.data ");
ofile.write((char*)a,sizeof(int)*999);
ofile.close();
ifile.open( "c:\\file.data ");
ifile.read((char*)b,sizeof(int)*999);
for(int i=0;i <999;i++) cout < <b[i] < <endl;
system( "PAUSE ");
return EXIT_SUCCESS;
}
结果显示从的二十几个后就是混乱数字 而且有负数 我想可能是
write 和 read 不能一次执行太多数据 然后我修改了一下:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int a[999],b[999];
ifstream ifile;
ofstream ofile;
for(int i=0;i <999;i++) a[i]=i;
ofile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ofile.write((char*)(a + i),sizeof(int));
ofile.close();
ifile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ifile.read((char*)(b + i),sizeof(int));
for(int i=0;i <999;i++) cout < <b[i] < <endl;
system( "PAUSE ");
return EXIT_SUCCESS;
}
还是不对问题出在哪呢?
------解决方案--------------------
ifile.open( "c:\\file.data ");-> ifile.open( "c:\\file.data ",ios::binary);
ofile.open( "c:\\file.data ");-> ofile.open( "c:\\file.data ",ios::binary);
------解决方案--------------------
for(int i=0;i <999;i++)
ofile. < <a[i] < < " "; //空格分割数据
ofile.close();
ifile.open( "c:\\file.data ");
for(int i=0;i <999;i++)
ifile> > b[i]; //读取时候自动会跳过空格分割符号