C++读文件时常抽风咋回事
C++读文件时常抽风怎么回事?用C++文件流,写入二进制数据到文本中。 然后再次打开时还得看文件流心情好不好。
C++读文件时常抽风怎么回事?
用C++文件流,写入二进制数据到文本中。 然后再次打开时还得看文件流心情好不好。心情好,文件读得出。心情不好。文件读不出。 实在太让我抓狂了。
1. 每次读写文件都是需要写入的时候才打开文件,文件写完后确定都调用了close()关闭文件。
2. 确定每次读和写的时候都没有使用任何工具打开需要读取信息或者写入信息的文本。
3. 读写文件都是独立的函数,并且读写都是分开函数的。不存在混合一起。
求大神告知下为什么C++读写文件会抽风,或者哪些情况下容易让人抓狂
[解决办法]
1. 我的意思是每个 read 或 >> 后面增加 if (m_iFile) 之类的自动化检测,不是让你自己拿眼睛看。
2. 你为啥要复制粘贴呢?直接找个能够读取二进制文件的程序,打开文件不就行了吗。复制粘贴的问题在于,系统做这些操作的时候可能重新解释内容,比如 \n 可能就不显示了,等等。不是说这些问题肯定在你的操作步骤中发生了,但现在调程序,要尽可能排出不可控因素。
喷不喷死我不知道,不过 99.9% 的可能性跟文件流没关系。如果你怀疑流的问题,我也建议你了,可以打开文件后一次性读入到字符串,然后你自己处理。如果你连这一个 read 也不放心,还可以使用 C 文件操作完成,这样彻底和文件流没关系了。你先确定你自己的程序在没有 C++ 流介入下的行为,如果确实正确无误,再怀疑流也还说得过去。
[解决办法]推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
[解决办法]从你的代码来看, 我猜, 发生你所说的问题的可能原因是. seekg出问题了.
你测试下, 每次都seekg到文件起始位置读取, 看是否会出现读取不到的情况.
如果seekg失败, 查看错误码, 找原因.
还有需要注意, 你的读写是否同步互斥的, 即读取的时候不会写, 写的时候不会读取.