zoukankan      html  css  js  c++  java
  • C++文件操作

    C++文件的读写存在一个问题:支持窄字节,不支持宽字节

    文件类型分为:文本文件、二进制文件

    C++ 通过以下几个类支持文件的输入输出:

    ofstream: 写操作(输出)的文件类 
    ifstream: 读操作(输入)的文件类
    fstream: 可同时读写操作的文件类 

    需要      #include <fstream>

     using namespace std;

    视频教程:

    文件IO操作之打开与关闭

     文件IO操作之读写

    读写文本文件:

    ofstream fs;//创建一个写文件流
    fs.open("d:\123.txt"); //打开文件 【个人:重新创建文件,原有内容被删除】
        /*
        参数2  打开方式
           ios::in   读                        ios::out 写
           ios::binary 二进制方式              ios::ate 初始位置:文件尾
           ios::app 所有输出附加在文件末尾     ios::trunc 如果文件已存在则先删除该文件
           这些标识符可以被组合使用,中间以操作符(|)间隔
        */
    
        //ofstream fs("d:\123.txt");//创建并打开一个写文件流
    
    
    
        fs << 20000 << endl;  //把20000写入文件
        fs.close();  //关闭文件
    
        ifstream fs1; //创建一个读文件流
        fs1.open("d:\123.txt"); //打开文件
        int var = 88;
        fs1 >> var;   //读取文件内容,放到var变量中
        fs1.close();

    判断文件打开是否成功:

    方法一:

    if (!fs)
    {
    str = _T("文件打开失败");

    }

    文件打开失败,fs=null

    方法二:

    if (!fs.is_open())
    {
    str = _T("文件打开失败");
    }

    文件打开失败,fs.is_open()返回null

    方法三:

    文件打开失败,fs.good()返回false

    good() 该方法在没有发生任何错误的时候返回true。该方法也指出的最后一次读取操作是否成功

    写文件:

    fs << 20000 << endl; //把整数20000写入文件

    fs << 18.9 << endl; //写浮点数
    fs << "word" << endl;
    fs << "中国" << endl; //写入窄字节中文;不能宽字节

    fs.put('y');   //写入英文字符

    读文件:

    int var = 88;
    fs1 >> var; //读取整数值,放到var变量中
    float fl;
    fs1 >> fl; //读取浮点数,放到fl变量中
    char ch[100];
    fs1 >> ch; //读取字符串,放到ch变量中
    fs1 >> ch;
    char ch1 = fs1.get(); //读取一个字符,包括

    char ch[100];
    fs1.getline(ch,100); //读取一行,放到ch变量中
    //参数2     ch缓冲区大小

    文件指针:

     bool bl = fs1.eof(); //判断文件指针是否到了文件末尾,在文件末尾返回True

     x = fs1.tellg();     //返回文件读指针位置;在文件末尾返回-1  

    x = fs.tellp();     //返回文件写指针位置

    fs1.seekg(-4, ios::cur);//移动文件读指针

    参数1:移动偏移量(字节数),可以是正负数值,正的表示向后偏移,负的表示向前偏移

    参数2:可以是

    ios::beg    表示输入流的开始位置
    ios::cur    表示输入流的当前位置
    ios::end   表示输入流的结束位置

    fs.seekp(-4, ios::cur);   //移动文件写指针

    参数1:移动偏移量(字节数),可以是正负数值,正的表示向后偏移,负的表示向前偏移,

    参数2:可以是

    ios::beg 表示输入流的开始位置
    ios::cur 表示输入流的当前位置
    ios::end 表示输入流的结束位置

     fs.seekg(1);  //移动文件读指针到某一位置

    fs.seekp(1);   //移动文件写指针到某一位置

    文件大小:把文件指针移到末尾,返回指针位置就是文件大小(字节数)

    读写二进制文件:

    ofstream fs;//创建一个写文件流
        fs.open("d:\1234.txt"); //打开文件
        int var = 20000;
        fs.write((char*)&var,sizeof(var));  //把var变量的内容写入文件
        //参数1 要写入的内容   char*类型的地址
        //参数2 写入的字节数
        fs.close();  //关闭文件
    
        ifstream fs1; //创建一个读文件流
        fs1.open("d:\1234.txt"); //打开文件
        var = 88;
        fs1.read((char*)&var,sizeof(int));   //读取文件内容,放到var变量中
        //参数1 读取数据保存的变量地址
        //读取字节数
        fs1.close();

     

     

     

     

     

    天子骄龙:生命诚可贵 时光价更高

  • 相关阅读:
    sbt commands
    SBT Assembly
    There is no setter for property named 可能产生的原因!
    JSP页面分页显示数据
    CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
    Windows下将程序打包为安装包(最为简易的方式)
    Linux多线程编程详细解析----条件变量 pthread_cond_t
    在Linux中使用线程
    关于verilog中语句可不可综合
    32位先行进位加法器的实现
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10616985.html
Copyright © 2011-2022 走看看