C++ 文件流操作必知必会

一、文件流操作

  1.确定文件打开的模式。可以选的模式主要有:

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

  2.默认情况下是以文本的方式写文件,并且会删除原本文件中的数据,即ios::trunc

  3.判断文件是否正常打开。好的文件操作习惯是,每次打开一个文件后,在进行文件写之前要判断文件是否正常打开,使用的函数是is_open()。

  4.文件写。主要有下面三函数,<< 流操作符,写一个字符put(),写一块数据write;

std::ostream::operator<<
std::ostream::put
std::ostream::write

5.文件读。主要有流操作符>>,读一个字符get,读一行getline,读文件中一块read

std::istream::operator>>
istream& operator>> (int& val);
std::istream::getline
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
std::getline (string)
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
std::istream::read
istream& read (char* s, streamsize n);
std::istream::get
istream& get (char& c);

6.文件结尾的判断 infile.eof()

7.文件关闭 infile.close()

8.文件定位 seekp(),seekg()

9.文件修改,见实例

1.1 文件写

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

using namespace std;
int main() {
    /*
     * ios::app:添加,ios::trunc:如果文件存在,先删除该文件(默认)
     * bios::binary 二进制方式读写,默认是文本方式
     */
    ofstream outfile("testfile.txt",ios::out | ios::trunc);
    if(!outfile.is_open()){
        cerr << "file cannot open!" << endl;
        return -1;
    }

    outfile << "This is a test.\n";
    outfile << 100 << endl;

    outfile.put(‘c‘);  // write a char.
    outfile.put(‘\n‘);

    char buffer[1024] = "abc";
    outfile.write(buffer,sizeof(buffer)); // write a block.

    outfile.close();

    return 0;
}

1.2 文件读

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

using namespace std;
int main() {

    ifstream infile("testfile.txt");
    if (!infile.is_open()) {
        cerr << "file cannot open!" << endl;
        return -1;
    }

    //读一个字符
    char ch;
    infile.get(ch);

    //读一个字符串
    string word;
    infile >> word;

    //读一行 常用
    infile.seekg(0);
    string line;
    getline(infile, line);

    char buffer[1024];
    infile.seekg(0); //定位到文件头
    infile.getline(buffer, sizeof(buffer));

    //读文件块
    infile.seekg(0);
    infile.read(buffer, sizeof(buffer));

    //判断文件结尾
    infile.seekg(0);
    while (!infile.eof()) {
        getline(infile,line);
//        infile >> word;
//        infile.read(buffer,sizeof(buffer));
    }

    infile.close();
    return 0;
}

1.3 文件内容修改

#include <fstream>

using namespace std;
int main() {
    fstream inOutFile("testfile.txt",ios::in | ios::out);
    inOutFile.seekg(50);
    inOutFile << "修改文件很容易!\n";
    inOutFile.close();
    return 0;
}
时间: 2024-12-15 01:45:48

C++ 文件流操作必知必会的相关文章

必知必会的目录和文件的作用、安装软件方法、运行级别

作者:Georgekai 归档:学习笔记 2017/12/28 目  录 第1章 ctrl+1 1 1.2  /etc/目录 1 1.2.1                   网卡配置文件和DNS配置文件 1.2.2                更改本机hosts文件 1.2.3                修改主机名 1.2.4                开机自动挂载的设备与目录的对应关系 1.2.5                开机自动运行的软件和命令存放位置 1.2.6    

Android必知必会-使用okhttp的PUT方式上传文件

背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp网络库,就查了下资料,在这里分享一下. 代码实现 /** * @param mediaType MediaType * @param uploadUrl put请求地址 * @param localPath 本地文件路径 * @return 响应的结果 和 HTTP status code * @throws IOException */ public String put(MediaType

Android必知必会-获取视频文件的截图、缩略图

背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取视频文件截图 * * @param path 视频文件的路径 * @return Bitmap 返回获取的Bitmap */ public static Bitmap getVideoThumb(String path) { MediaMetadataRetriever media = new Me

《MySQL必知必会》读书笔记_4

PS:一个实际的存储过程案例 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_delete_article_by_id`(IN `id` int) BEGIN #Routine body goes here... DECLARE temp INT; SET @aid = id; SELECT COUNT(*) FROM gk_reply_article WHERE a_id = @aid INTO temp; IF(temp <> 0) THEN

.NET零基础入门09:SQL必知必会

一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏,数据就没了: 2:文件中.好办法!缺点,自己解析文本,把文本变成我们程序中的数据,这个解析的过程叫做协议.协议这个词听上去够恐怖吧,实际上说白了无非就是数据格式怎么样,API接口怎么样之类的东东. 3:数据库.好办法!好吧,数据库文件其实也就是硬盘上的文件,只不过数据库本身就已经为我们定义好了数据格

TCP/IP,必知必会的

文章目录 前言 TCP/IP模型 数据链路层 网络层 ping Traceroute TCP/UDP DNS TCP连接的建立与终止 TCP流量控制 TCP拥塞控制 0 前言 本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. 1 TCP/IP模型 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议. 基于TCP

读MYSQL必知必会的总结

看到了mysql必知必会 总结了以下几个以后很有可能用到的知识点: 1.在检索多列的时候,需要再列名之间用","进行分开,最后的列名后面不加. select id,uid,name from 表名;      select* form 表名 代表检索所有的列 2.在检索指定从第几行开始后的几行 select id from 表名 limit 3,4;第3行开始的后4行,要注意的是检测出来的第一行为0. 3.可以用 order by 语句对检测数来的进行排序,因为数据会受到修改编辑的影响

读《MySql必知必会》笔记

MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SHOW STATUS,用于显示广泛的服务器状态信息 DESCRIBE tableName;是SHOW COLUMNS FROM tableName;的一种快捷方式 SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句 SHOW G

sql必知必会的数据初始化

之前已经配置好mysql的工作环境,但是还缺少可以进行操作的文件,即缺少对应的一个数据库和其中的5个表. 下载相关代码 在网址http://www.forta.com/books/0672325675/ 中下载相关文件,在这里我下载的是MySQL (and MariaDB) SQL scripts. 下载后进行解压,会有两个文件:create.txt和populate.txt. 数据库的建立 在mysql中输入:CREATE DATABASE OrderDb; 不要忘记分号,这是MySQL的语法