c++学习笔记:文件流的各种操作

欲使用ifstream和ofstream,首先需要引用fstream

#include <fstream>

一、使用ifstream读取文件的全部文本

ifstream ifs;
   string path("src/test.txt");//考虑到最终程序最终执行环境是在工程目录下的,所以这里用此路径
   ifs.open(path);//open可以传第二个参数,六个值in:以读方式打开;out:以写方式打开,直接写入将覆盖,但是可以移动指针,在文件末尾写入;binary:操作方式将更倾向于二进制;ate:输出默认会在文件的末尾开展,但打开时会清空该文件;app:输出也是在文件末尾展开,不会清空该文件;trunc:任何打开前的内容,都将会被清空。值得注意的是:如果该文件的上层目录不存在的话,将肯定会失败,反之,则没有该文件时候,会自动创建一个

string str;
string line;
   if(ifs){//隐式转换为bool
       while(getline(ifs,line)){
            str +=line;
          }
       cout<<str<<endl;
   }else{
       cout<<"真不好意思,打开失败了"<<endl;
   }

二、分前后两段,读取文件的全部文本

ifstream ifs;
   string path("src/test.txt");
   ifs.open(path,ios::binary);
   if(ifs){
      ifs.seekg(0,ios::end);//指针指向流的末尾,相对于末尾的偏移量为0,另外此方法还有传入一个参数的重载版本,传入的是一个相对于文件结束位置的绝对值
      int length = static_cast<int>(ifs.tellg());//tellg返回当前指针的位置,从0开始,end指向的刚好是文件结束位置的下一位,所以end的位置刚好是文件的字节数,所以如果是汉字,使用二进制一半一半读取的话,中间一个汉字可能被拆分而成为乱码
      ifs.seekg(0,ios::beg);//可以穿 end:流的末位的下一位,beg:流的开始位置和cur:当前读取位置。
      int strLength1 = length/2;
      int strLength2 = length%2==0?strLength1:strLength1;
      char str1[strLength1+1];
      char str2[strLength2+1];
      ifs.read(str1,strLength1);
      ifs.read(str2,strLength2);
      ifs.close();
      cout<<str1<<endl<<endl<<endl<<endl<<str2;
   }else{
       cout<<"真不好意思,打开失败了"<<endl;
   }

三、直接在文件末尾添加一段文字

       ofstream ofs;
       string path("src/test.txt");
       ofs.open(path,ios::app);//以append方式打开文件
       string text("三月,伪文学家发情的、无病呻吟的季节");
       ofs.write(text.c_str(),text.length());
       ofs.close();

四、复制文件的内容,用复制的内容替代以前的内容,其实相当于什么都不干

ifstream ifs;
    string path("src/test.txt");
    ifs.open(path,ios::in);
    char* data;
    int length = -1;
    if(ifs){
        ifs.seekg(0,ios::end);
        length = static_cast<int>(ifs.tellg());
        ifs.seekg(0,ios::beg);
        char str[length+1];
        data = str;
        ifs.read(str,length);
        ifs.close();
    }

    if(length!=-1){
        ofstream ofs;
            ofs.open(path,ios::ate|ios::out);//清空模式
           if(ofs){
                ofs.write(data,length);
                ofs.close();
                cout<<"写入成功"<<endl;
            }
    }

此外,如果读取一个文件之后,需要读取下一个,直接调用clear方法就可以接着干了。

嗯,最常用的方法就学到这里,其他的遇到自行查阅api,下次开始学习sstream

时间: 2024-11-07 17:35:51

c++学习笔记:文件流的各种操作的相关文章

C#学习笔记 --文件和注册表操作

System.MarshalByRefObject --这是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组数据. FileSystemInfo --这是表示任何文件系统对象的基类 FileInfo和File --这些类表示文件系统上的文件 DirectoryInfo和Directory --这些类表示文件系统上的文件夹 Path --这个类包含的静态成员可以用于处理路径名 DriveInfo --它的属性和方法提供了指定驱动器的信息 Directory类和File类只包含静态方法

java 学习笔记之 流、文件的操作

ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import java.io.FilenameFilter; public class Test1 { public static void main(String[] args) { File file=new File("F:\\2017-2018-1\\javase"); // //获取该目录下

EasyARM i.mx28学习笔记——文件IO方式操作GPIO

0 前言 本文描述如果通过文件IO sysfs方式控制EasyARM GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相关博文] [EasyARM

.net学习笔记--文件读写的几种方式

在.net中有很多有用的类库来读写硬盘上的文件 一般比较常用的有: File:1.什么时候使用:当读写件大小不大,同时可以一次性进行读写操作的时候使用         2.不同的方式可以读写文件类型不一样. ReadAllBytes()  WriteAllByte():可以读写任意类型的文件 (里面封装的是FileStream)           ReadAllLines()  ReadAllText():(里面封装是StreamWriter,StreamReader),只能读写文本类型文件

Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习

一.URI 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频片段等都可以用Uri来表示. URI一般由三部分组成: 访问资源的命名机制. 存放资源的主机名. 资源自身的名称,由路径表示. Android的Uri由以下三部分组成: "content://".数据的路径.标示ID(可选) 举些例子,如: 所有联系人的Uri: content://con

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

Linux 程序设计学习笔记----文件管理系统

本文部分整理自网络 Linux下文件系统管理 1.VFS文件系统概述 linux采用VFS来管理文件系统,而且linux设计的原则之一就是everything is file.因此文件管理系统是linux设计最核心的体现. VFS的全称是Virtual File System (虚拟文件系统). 总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,

[Spring Data MongoDB]学习笔记--MongoTemplate查询操作

查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery query = new BasicQuery("{ age : { $lt : 50 }, accounts.balance : { $gt : 1000.00 }}"); List<Person> result = mongoTemplate.find(query, Perso

Android(java)学习笔记167:Java中操作文件的类介绍

1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creates a new File instance by converting the given pathname string into an abstract pathname. 2)File(File parent, String child)       Creates a new File i

PHP学习笔记-文件操作1

转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/52294237 本文出自:[顾林海的博客] 前言 PHP支持文件上传功能,因此学习PHP文件的相关操作是必须的,这篇笔记会去记录PHP文件系统的相关知识. 文件打开与关闭 文件处理包括读取.关闭.重写等,例如,访问一个文件需要3步:打开文件.读写文件和关闭文件.其他的操作要么是包含在读写文件中(如显示内容.写入内容等),要么与文件自身的属性有关系(如文件遍历.文件改名等