文件流-fstream插入字符的问题

问题描述

fstream插入字符的问题

下面的内容去掉地23,24行才能显示出后面插入的"abc"字符,道理是啥啊?调试一天了。
23: myStream.getline(buffer,100);
24:cout<<"before insert:"<<buffer<<endl;
环境:windows 7 64位;gcc 4.7.2;codeblcoks 16.01

 #include<iostream>
#include<fstream>
using namespace std;
int main()
{
    char fileName[15]="test01.txt";
    ofstream fout(fileName);
    fout.close();

    fstream myStream(fileName,ios::in|ios::out);
    if(!myStream.is_open())
    {
        cout<<"fail to open the file"<<endl;
        return 0;
    }

    myStream<<"123";
    myStream<<"xyz";

    myStream.seekg(0);
    char buffer[100]= {0};
    myStream.getline(buffer,100);
    cout<<"before insert:"<<buffer<<endl;

    myStream<<"abc";

    myStream.seekg(0);
    myStream.getline(buffer,100);
    cout<<"after insert:"<<buffer<<endl;
}

解决方案

在执行完23行之后,myStream到文件尾了,eof标识符为1,就不会继续做文件读写操作了。
解决方案:在myStream>>"abc"前加上如下代码:

if(myStream.eof()){
    myStream.clear();
}

clear用于清除状态码,这样就可以正常读写,而读写指针被放在尾部(因为前一步getline时指针移到了末尾)。
如果你需要在文件头部插入,还需要在clear后加上一句:

myStream.seekp(0);

解决方案二:

感谢cxsmarkchan的精彩回答,不仅将原因阐明清楚,且进行了有效扩展。前因后果描述清晰。谢谢!

时间: 2025-01-19 08:31:25

文件流-fstream插入字符的问题的相关文章

c++读写文件流实例程序讲解

 这篇文章主要介绍了c++读写文件流实例,大家参考使用吧 掌握文本文件读写的方法 了解二进制文件的读写方法   C++文件流:     复制代码 代码如下: fstream // 文件流 ifstream // 输入文件流 ofstream // 输出文件流   //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include<iomanip.h> #include<fstream.h> void main() { ofstream f1("d

C++读写文件流的相关介绍

掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流:fstream // 文件流ifstream  // 输入文件流ofstream  // 输出文件流 //创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include<iomanip.h>#include<fstream.h>void main(){ ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它 if(!f1)return; /

详解C++编程中的文件流与字符串流_C 语言

C++文件流类与文件流对象 文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件流是由若干个文件组成的流.文件流本身不是文件,而只是以文件为输入输出对象的流.若要对磁盘文件输入输出,就必须通过文件流来实现. 在C++的I/O类库中定义了几种文件类,专门用于对磁盘文件的输入输出操作. 除了标准输入输出流类istream.ostream和iostream

c++读写文件流实例程序讲解_C 语言

掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流: 复制代码 代码如下: fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流 //创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include<iomanip.h>#include<fstream.h>void main(){ ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它 if(!f1

C++中输入输出流及文件流操作总结_C 语言

本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1.流的控制     iomanip          在使用格式化I/O时应包含此头文件.     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstrea

c++ 输入输出流-c++文件流相关问题,编译通过,但是结果为什么却报错?

问题描述 c++文件流相关问题,编译通过,但是结果为什么却报错? 源码如下,这是书上的一个习题: #pragma warning(disable: 4786)#include<map>#include<set>#include<iostream>#include<fstream>#include<string>using namespace std;void initialize_exclusion_set(set<string>&a

为什么对整个文件流计算MD5比分块慢

问题描述 计算一个文件的MD5和把文件分成n分,计算每块的MD5.为什么对文件流计算的还慢呢?HMACSHA1hmac=newHMACSHA1(BitConverter.GetBytes(HashKey[0]));hashes=hmac.ComputeHash(data);//其中一个文件块,共n块HMACSHA1hmac2=newHMACSHA1(BitConverter.GetBytes(HashKey[0]));hashes=hmac2.ComputeHash(fstream);//计算文

通过xslt文件向excel插入图片

问题描述 最近在做一个项目,是B/S架构的,在客户端要生成excel报表,如果只是文字的内容,我是先生成xml文件,然后通过xslt文件转换,可以对报表的格式及内容做比较好的控制,但是现在要在excel中插入图片,实在是不知道怎么通过xslt转换了,看网上说的,要用owc组件,这个要在服务器端生成excel文件,觉得不安全,怕出什么问题,还是向问下各位大侠,牛人,该怎么做,现在快急疯了 解决方案 解决方案二:怎么没人回啊,自己顶一个解决方案三:插入图片那就必须先把图片下载到客户端,网页可以通过文

文件流 二进制-C++文件流二进制加解密问题

问题描述 C++文件流二进制加解密问题 最近在编一个加密程序,想通过fstream来对文件进行操作.想用文件流实现在文件中的二进制模二加,求助大神们. fstream finout: finout.open(filename,ios_base::binary):接下来就不知道怎么做了,不想用fwrite