• C++文件操作


    C++用 ifstream 声明输入文件对象,用 ofstream 声明输出文件对象。

    getline的使用:(感觉有点像孔乙己的茴香豆的 茴 的写法了)

    #include<iostream>

    #include<fstream>

    #include<string>

    using namespace std;

    int main()

    {

        ifstream infile("getline.txt",ios::in | ios::binary);

        char buf1_1[30];

        string buf1;

        char buf2[30];

        ///注意这里getline的两种不同的函数定义,输入缓冲一个需要string类型(【1】)

        ///另一个需要char* 类型(【2】)

        getline(cin,buf1); //istream& getline ( istream& is, string& str );  【1】

        cin.getline(buf1_1,30); ///【2】

        /*

        istream& getline (char* s, streamsize n );

        istream& getline (char* s, streamsize n, char delim );

        */

        infile.getline(buf2,30,'a');

        /*

        istream& getline (char* s, streamsize n );

        istream& getline (char* s, streamsize n, char delim );

        //delime表示遇到该字符结束,也可以不使用

        */

        cout << "buf1: "<< buf1 <<endl;

        cout << "buf1_1: "<< buf1_1 <<endl;

        cout << "buf2: "<< buf2 <<endl;

        return 0;

    }

    使用ofstream简化文件输出(不用使用fwrtie):

    ofstream examplefile ("example.txt");

        if (examplefile.is_open())

         {

            examplefile << "This is a line.\n";  //直接将该字符串写入到examplefile文件中

            examplefile << "This is another line.\n";

            examplefile.close();

         }

    使用ifstream简化文件输入(不用使用fread):

    char buffer[256];

        ifstream examplefile ("example.txt");

        if (!examplefile.is_open())

        {

            cout << "Error opening file";

            exit (1);//include<stdlib.h>

        }

        while (!examplefile.eof() )

        {

            examplefile.getline (buffer,100);

            cout << buffer << endl;

    }

    使用C++ seek

        const char * filename = "example.txt";

        char * buffer;

        long size;

        ifstream file (filename, ios::in|ios::binary|ios::ate);

        ofstream file_out ("example_out.txt",ios::out | ios :: app);

        //file.seekg (0, ios::end); //因为上面使用了ios::ate 所以这里不用seek end了

        size = file.tellg();//tellg获取当前读文件的位置,这里也就是文件大小

        /*

            说明

            获取或者移动文件制作,对于tellg、seekg 来说是针对ifstream

            对于tellp、seekp来说是针对ofstream

            seekp 或 seekg:

            ios::beg  From beginning of stream

            ios::cur  Current position in stream

            ios::end  From end of stream

        */

        buffer = new char [size + 1];

        file.seekg(0,ios::beg);//在将文件指针移回来以便读入

        file.read (buffer, size); //istream& read ( char* s, streamsize n );

        buffer[size] = '\0';

        file.close();

        cout << "size: "<<size<<endl;

        cout << "the complete file is in a buffer: "<<endl;

        cout<<buffer<<endl;

        file_out.write(buffer,size);//ostream& write ( const char* s , streamsize n );

        file_out.write(buffer,size);//这里写了两次主要是为了证明

                                    //file_out是以ios :: app的方式打开的,其看出来实也没有当你再次运行该程序的时候才能

        delete[] buffer;

    附:(文件打开模式)

  • 相关阅读:
    【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ
    【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ
    【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
    【剑指Offer面试编程题】题目1371:最小的K个数--九度OJ
    vue路由传参
    Es5.Es6区别
    面向对象和面向过程
    vuex
    Vue脚手架使用
    vue中fetch请求
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/2508272.html
Copyright © 2020-2023  润新知