首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-03-27 
非常奇怪的文件读取问题这个问题困扰我半天了,请大家帮助我看看是什么问题。void saveData(){using namespa

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


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。

热点排行