from
曾经看过一个帖子http://pnig0s1992.blog.51cto.com/393390/563152,文中说c++读写二进制文件关键在于接口函数,用什么模式打开没有关系,我觉得那样讲是不对的。不过文章看一下也可以。
c++读写二进制文件,在windows与linux下可能会有不同的效果。本人写的一个小例子在linux下写入二进制数据正常,而在windows下面写入数据的过程中,竟然自动添加了0x25等等一些无意义的字节,找了好久才发现这个bug。
下面是正确的写法
- struct HashKey_S
- {
- HashKey_S(DWORD uiFirst = 0, DWORD uiSecond = 0):uifirsthash(uiFirst), uisecondhash(uiSecond){
- }
- HashKey_S(const HashKey_S &stHash):uifirsthash(stHash.uifirsthash), uisecondhash(stHash.uisecondhash){
- }
- DWORD uifirsthash;
- DWORD uisecondhash;
- };
- void TestWriteBinary()
- {
- const char *pcwritefile = "fileBinary.txt";
-
- ofstream ofs;
- ofs.open(pcwritefile, ios::out | ios::binary);
- assert(ofs.is_open());
-
- for (int i = 0; i < 100; ++i)
- {
- HashKey_S stHashKey;
- stHashKey.uifirsthash = 1;
- stHashKey.uisecondhash = 2;
- ofs.write((const char*)(&stHashKey), sizeof(stHashKey));
- }
- ofs.close();
- }
错误的写法是这样的(在linux下工作正常,windows下异常)
- void TestWriteBinary()
- {
- const char *pcwritefile = "fileBinary.txt";
-
- ofstream ofs;
- ofs.open(pcwritefile, ios::out);
- assert(ofs.is_open());
-
- for (int i = 0; i < 100; ++i)
- {
- HashKey_S stHashKey;
- stHashKey.uifirsthash = 1;
- stHashKey.uisecondhash = 2;
- ofs.write((const char*)(&stHashKey), sizeof(stHashKey));
- }
- ofs.close();
- }
仅仅是在打开文件的时候,没有加ios::binary而已。
同样在读文件的同时,也一定要加上ios::binary,用read读文件即可。
下面是c++读写二进制的一些基础知识,写的不错:http://blog.csdn.net/kingstar158/article/details/6859379
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。