码迷,mamicode.com
首页 > 编程语言 > 详细

C++文件读写

时间:2018-01-24 00:42:42      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:删除   lsp   使用   col   i/o   附加   输入   while   pac   

 
#include <fstream>  
ofstream         //文件写操作 内存写入存储设备   
ifstream         //文件读操作,存储设备读区到内存中  
fstream          //读写操作,对打开的文件可进行读写操作   

 

1.打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

函数:open()

void open ( const char * filename,  
            ios_base::openmode mode = ios_base::in | ios_base::out );  
  
void open(const wchar_t *_Filename,  
        ios_base::openmode mode= ios_base::in | ios_base::out,  
        int prot = ios_base::_Openprot); 

参数: filename   操作文件名

           mode        打开文件的方式

           prot         打开文件的属性                            //基本很少用到,在查看资料时,发现有两种方式

打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:

 

ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式

这些方式是能够进行组合使用的,以“或”运算(“|”)的方式:例如

ofstream out;  
out.open("Hello.txt", ios::in|ios::out|ios::binary)   //根据自己需要进行适当的选取  

打开文件的属性同样在ios类中也有定义:

0 普通文件,打开操作
1 只读文件
2 隐含文件
4 系统文件

对于文件的属性也可以使用“或”运算和“+”进行组合使用,这里就不做说明了。

 

C++写文件示例程序:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

//ios_base::trunc - 如果文件已存在则先删除该文件

int main()
{
    string filename = "student.txt";
#if 1   //方式一,创建默认文件输出流对象
    ofstream outFile;
    outFile.open(filename.c_str(),ios_base::trunc | ios_base::out); //2,以清空写方式打开文件
#endif

#if 0   //方式二:创建指定文件和以清空写文本文件的方式
    ofstream outFile(filename.c_str());
#endif

#if 0   //方式三:创建文件输入出流对象,并且以指定清空写方式打字符文件
    ofstream outFile(filename.c_str(),ios_base::trunc | ios_base::out);
#endif

    if(outFile.is_open())   //3,判断文件是否打开  成功打开,返回true
    {

#if 0
        outFile.put(C);   //4,写入单个字符
        outFile.flush();  //清空缓冲区
#endif

#if 0
        string str = "hello world";
        outFile.write(str.c_str(),str.length());    //5,写入字符串
        outFile.flush();
#endif

#if 1
        int value = 100;        //6,使用<<,写入字符串
        string str = "hello world";
        float f = 3.14f;
        outFile << value << " " <<str  << " " << f << endl; //6,同时写入各种不同类型数据
        outFile.flush();
#endif
    }

    outFile.close();    //7,关闭文件

}

 

C++读文件示例:

#include <iostream>
#include <string>
#include <fstream>
#include <string.h>

using namespace std;

//filename.c_str()  c_str()将str转换成const char *

int main()
{
    string filename = "student.txt";

#if 0   //创建默认的ifstream对象
    ifstream in;
    in.open(filename.c_str(),ios_base::in);
#endif

#if 0   //创建ifstream对象,并指定到某一个文件,默认打开字符文件
    ifstream in(filename.c_str());
#endif

    //创建ifstream对象,并指定到某一个文件,并以指定方式打开文件
    ifstream in(filename.c_str(),ios_base::in);
    char buf[128] = {0};

    if(in.is_open())
    {
#if 0
        char ch = in.get();     //读一个字符
        cout << "ch = " << ch << endl;
#endif

#if 0
        memset(buf,0,sizeof(buf));
        in.getline(buf,sizeof(buf) - 1);    //只能读一行
        cout << buf << endl;
#endif

#if 1
        memset(buf,0,sizeof(buf));
        in.read(buf,sizeof(buf) - 1);       //可以从缓冲区读取,也能从文件中直接读取
        cout << buf << endl;
#endif

#if 0
        cout << "in.gcount() = " << in.gcount() <<  endl;       //gcount用于检查缓冲区内可读字节数
        memset(buf,0,sizeof(buf));
        in.read(buf,sizeof(buf) - 1);
        cout << "in.gcount() = " << in.gcount() <<  endl;
        in.readsome(buf,in.gcount());   //只能从缓冲区读取内容
        cout << buf << endl;
#endif

#if 0
        //file: 100 hello world 3.14
        string str1,str2,str3;
        in >> str1 >> str2 >> str3;     //使用>>每次从文件读一个单词,以空格或‘\n‘为分隔符
        cout << str1 << endl;   //100
        cout << str2 << endl;   //hello
        cout << str3 << endl;   //world
#endif

#if 0
        char ch;
        while(!in.eof())        //eof()函数用于检查是否到达文件结尾
        {
            ch = in.get();
            cout << ch;
        }
#endif

#if 0
        while(!in.eof())
        {
            memset(buf,0,sizeof(buf));
            in.getline(buf,sizeof(buf) - 1);    //读取一行,但是不会读换行符
            cout << buf << endl;
        }
#endif

#if 0
        while(!in.eof())
        {
            memset(buf,0,sizeof(buf));
            in.read(buf,sizeof(buf) - 1);
            cout << buf;
        }
        cout << endl;
#endif



#if 0
    string str;
    while(!in.eof())
    {
        in >> str;
        cout << str << endl;
    }
#endif

    in.close();
    }
}

 

C++文件读写

标签:删除   lsp   使用   col   i/o   附加   输入   while   pac   

原文地址:https://www.cnblogs.com/linuxAndMcu/p/8338359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!