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(); //读取一个字符,包括\n \r

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();

 

判断路径是否正确 

const char* filePath = "D:/bb/tu/lm.jpg";
    std::ifstream file(filePath);
    if(file.good()){ //文件存在
        qDebug()<<" 路径正确";
    }
    else{
        qDebug()<<"路径不正确";
    }

 

 

 

 

 

posted @ 2019-03-28 18:56  天子骄龙  阅读(759)  评论(0编辑  收藏  举报