zoukankan      html  css  js  c++  java
  • c++读取文本文件的一个极其容易忽略的空行问题

     

    C++用fstream打开文件之后,读一次文件后,再次读该文件却怎样也不能将文件的指针置到开头?

    分类:
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    using namespace std;
    class Copy_file{
        public:
        Copy_file();
        ~Copy_file();
        void Copy_files();
        void in_file();
        void out_file();
        private:
        fstream inf;
        fstream outf;
        char file1[20];
        char file2[20];
    };
    Copy_file::Copy_file(){
        cout<<"请输入源文件名";
        cin>>file1;
        inf.open(file1,ios::in|ios::binary);
        if(!inf){
            cout<<"不能打开文件"<<endl;
            abort();
        }
        cout<<"请输入目的文件名字";
        cin>>file2;
        outf.open(file2,ios::in|ios::out|ios::binary);
        if(!outf){
            cout<<"不能打开目的文件";
            abort();
        }
    }
    Copy_file::~Copy_file(){
        inf.close();
        outf.close();
    }
    void Copy_file::Copy_files(){
        char ch;
        inf.seekg(0);
        inf.get(ch);
        while(!inf.eof()){
            if(ch>='a' && ch<='z')
                outf.put(ch);
            inf.get(ch);
        }
    }
    void Copy_file::in_file(){
        char ch;
       /* inf.close();
        inf.open(file1,ios::in|ios::binary);*/      //  采用关闭文件后,在打开文件可以把指针指到开头
        inf.clear();   
       cout<<inf.tellg();
       inf.seekg(ios::beg);


       // inf.seekg(5,ios::cur);
        inf.get(ch);
        while(!inf.eof()){
            cout<<ch;
            inf.get(ch);
        }
        cout<<endl;
    }
    void Copy_file::out_file(){
        char ch;
        outf.seekg(0);
        outf.get(ch);
        while(!outf.eof()){
            cout<<ch;
            outf.get(ch);
        }
        cout<<endl;
    }
    int main()
    {
        Copy_file cf;
        cf.Copy_files();
        cout<<"源文件内容:"<<endl;
        cf.in_file();
        cout<<"目的文件的内容:"<<endl;
        cf.out_file();
        return 0;

    }

    这个意思是将ss.txt的内容复制到oo.txt   cout<<inf.tellg();  输出当前指针位置时,却一直返回-1  怎么都不能用inf.seekg(iOS::beg);将指针指到开头,这个问题我查了一个早上才发现解决办法。。。


    在定位前对流状态标志进行清除就可以了:
       inf.clear();
       inf.seekg(0,ios::beg);
    
    file1读结束后,eof()返回真值时,file1的错误标志被设置为eofbit,于是,后续所有针对file1的操作都不能得到预期的结果,比如tellp、tellg、seekg、seekp等,因此,在进行其他针对file1的操作前,需要清除该错误标志~~~!

    还有一种解决办法是

        inf.close();
        inf.open(file1,ios::in|ios::binary);  关闭文件,然后再打开该文件

  • 相关阅读:
    java实现调用打印机代码
    java合并PDF文件
    关于如何把项目做得更好的一次思考
    web语义化之SEO和ARIA
    快速理解web语义化
    使用HTML5地理位置定位到城市的方法及注意事项
    Plupload上传插件简单整理
    两列布局——左侧宽度固定,右侧宽度自适应的两种方法
    Java并发编程之线程基础
    Spring Boot学习之YAML文件配置
  • 原文地址:https://www.cnblogs.com/lyx2018/p/7252600.html
Copyright © 2011-2022 走看看