读书人

非常奇怪的文件读取有关问题

发布时间: 2013-03-27 11:22:42 作者: rapoo

非常奇怪的文件读取问题
这个问题困扰我半天了,请大家帮助我看看是什么问题。


void saveData()
{
using namespace std;
//保存列宽
int array[32]={0};
int finishHeader[32]={0};
for(int i=0;i<32;i++)
{
finishHeader[i]=i*2;
array[i]=i;

}

//计算校验码
int check=0;
char* c=(char*)&array;
for(int i=0;i<sizeof(array);i++)
{
check+=*c;
c++;
}
fstream ofs;
ofs.open("./finishColwidth.dat",ios::trunc|ios::out);
ofs.write((char*)&check,sizeof(check));
ofs.write((char*)(finishHeader),sizeof(finishHeader));

ofs.write((char*)&array,sizeof(array));
ofs.close();
}


void loadData
{
using namespace std;
ifstream ifs;

ifs.open("./finishColwidth.dat",ios::in);
int checkFromFile=0;
ifs.read((char*)&checkFromFile,sizeof(checkFromFile));
int array[32]={0};
int finishHeader[32];
ifs.read((unsigned char*)(finishHeader),sizeof(finishHeader));
//int abc[11];
//ifs.read((char*)abc,sizeof(abc));
//ifs.read((unsigned char*)&array,sizeof(array));


for(int i=0;i<32;i++)
{
ifs.read((char*)(&array[i]),sizeof(array[i]));
}
unsigned int abb=(unsigned int)&array;

ifs.close();
int checkFromCal=0;
char* c=(char*)array;
for(int i=0;i<sizeof(array);i++)
{
checkFromCal+=*c;


c++;
}
//如果校验正确,那就读取主文件中的列宽数据
if(checkFromFile==checkFromCal &&checkFromCal!=0)
{
for(int i=0;i<32;i++)
ShowMessage(array[i]);
}
}



问题描述:为什么每次array读过来的数据都是0?
[解决办法]
引用:
这个问题困扰我半天了,请大家帮助我看看是什么问题。
C/C++ code?1234567891011121314151617181920212223242526272829void saveData(){ using namespace std; //保存列宽 int array[32]={0}; int finis……

不奇怪,你往文本文件里写二进制数据,能成功才奇怪呢。所有文件打开方式都加上ios::binary。

读书人网 >C++

热点推荐