file.close()失灵?

minioreo 2007-05-04 10:04:17
看看下面的代码
void main()
{
fstream file1("test.txt",ios::out|ios::binary),file2;
char a('a');
if(file1.fail())
{
cout<<"wrong1"<<endl;
exit(1);
}
file1.write(&a,sizeof(a));
file1.close();

file2.open("test.txt",ios::in|ios::binary);

if(file2.fail())
{
cout<<"wrong2"<<endl;
exit(1);
}
while(!file2.eof())
{
file2.read(&a,sizeof(a));
cout<<a<<endl;
}


file2.close();

}
明明只写了一个字节a进去 文件大小查看了一下也是1个字节
但是第一次读完按说file2.eof() 应该返回false了
但又读了一次。。。。。这怎么搞的?该怎么解决啊?
...全文
330 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sco_field 2007-05-06
  • 打赏
  • 举报
回复
关注。。
难道不是0A的问题?
lin_style 2007-05-05
  • 打赏
  • 举报
回复
读字符就是这样。
会多读一次

《c++标准输入输出有》讲

char c
string content;
while( file1.get(c) )
{
content+=c;
}
这样试试
minioreo 2007-05-05
  • 打赏
  • 举报
回复
还有别的办法么?
minioreo 2007-05-05
  • 打赏
  • 举报
回复
楼上的不行啊 如果记录中的数据个数为9的倍数 还是会多读一遍。。。
在while的条件里如何写才能不多读一遍呢?(如果不用while(file.read(c,1))这种写法的话)
还有 为什么会多读一遍呢?二进制写的文件里面到底是怎么存储的呢?那个文件结束符是放哪的?
believefym 2007-05-05
  • 打赏
  • 举报
回复
char c[10]={0};
while(!file2.eof())
{
file2.read(c,9);
cout<<c<<endl;
memset(c,0,sizeof(c)/sizeof(char));
}
minioreo 2007-05-05
  • 打赏
  • 举报
回复
没有\n啊 是类以二进制方式一个一个写进去的
windowsxp0925 2007-05-05
  • 打赏
  • 举报
回复
注意文件尾的\n
minioreo 2007-05-05
  • 打赏
  • 举报
回复
在while循环条件里读取是可以的避免多读一次的 但是为什么用eof()不行呢?谁能帮解释下,谢谢。
cangwu_lee 2007-05-05
  • 打赏
  • 举报
回复
甚至,这样也行

while( ff2.get(c) ){
//————————前后相同。


这两个都在 mingw32-g++ 测试通过。
cangwu_lee 2007-05-05
  • 打赏
  • 举报
回复
这样写法正常:

char c;
int pos=0;

while(ff2>>c){
cout<<pos<<" "<<c<<endl;
pos++;
}
ff2.close();
cangwu_lee 2007-05-05
  • 打赏
  • 举报
回复
觉得应该是每次读完之后,要人为地将指针往前推一个字符。
minioreo 2007-05-04
  • 打赏
  • 举报
回复
为什么会多读一次呢?费解。。。
wdz609 2007-05-04
  • 打赏
  • 举报
回复
当利用fstream进行文件操作时,不应该用eof来作为循环条件的,因为他到最后会多读一次,类似do-while(呵呵)。应该利用读到的数据进行判断,如使用getline时,可以利用
while(getline()) 判断是否读到文件末
baggio1984 2007-05-04
  • 打赏
  • 举报
回复
第一个file2.eof()前没见到读操作啊,看不懂

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧