emmm,错误地方还请指出(以下代码复制粘贴会报错,我用codeblocks测试过,不知道为什么qaq

头文件#include < fstream >

这里ofstream是”output file stream(输出文件流)”,是从内存到硬盘;ifstream是”input file stream(输入文件流)”,是从硬盘到内存

以写入文件的方式打开文件的方法用ofstream:

#include <fstream>

using namespace std;

int main()

{

  ofstream File("Hello World.txt");

  File.close();

  return 0;

}

File为一个文件句柄(对象),ofstream为写操作,这样就打开了一个名为”Hello World.txt”的文件,结尾的File.close()函数可以关闭这个文件

open()函数打开文件:

#include <fstream>

using namespace std;

int main()

{

 ofstream File;

 File.open("Hello World.txt");

 File.close();

 return 0;

}

open函数也可以打开文件,两种方法都可以,感觉没什么区别,然后我们讲打开模式

ofstream File(char *filename, int open_mode)同样还有ifstream,fstream

filename表示文件名称(一个字符串)

open_mode表示打开的模式

名称         描述

ios::in         以读取的方式打开文件

ios::out        以写入的方式打开文件

ios::out | ios::app   将数据追加到文件的结尾

ios::out | ios::trunc  以写入方式打开文件时首先截断(清空)文件内容

ios::binary      以二进制的方式打开文件,不加它默认文本方式

以写入文件的方式打开文件就可以这样写了:

fstream File(“Hello World.txt”, ios::out);

ios::out指以写入文件的模式打开文件

然后我们说怎么往文件中写入数据:

比如第一个程序,只需在打开文件之后,在下一行写入

File << “Hello world\n”; //向文件中写入了Hello world并换行

有点像cin,cin就是从键盘向程序中写入,File就是从程序往文件中输出

如果想输入变量等等,可以这么写:

int a = 5;

File << a; //这样文件中就有了5

接着我们说说怎样读取文件里的数据

#include <iostream>

#include <fstream>

using naemspace std;

int main()

{

 char ch;

 ofstream File1("Hello World.txt");

 File1 << "Hello World\n";

 File1.close();

 ifstream File2("Hello World.txt");

 while(!File2.eof())

 {

  File2.get(ch);

  cout << ch;

 }

 File2.close();

 return 0;

}

然后我们讲解这段程序,前面存入文件的部分你应该懂了,后面ifstream是读取文件File2.eof()函数意思是读取到文件末尾后返回一个非零值,我们用while(!File2.eof())就可以循环到文件的末尾,File.get(ch)函数是从文件流读取一个字符并存入到变量ch中,再次调用该函数它内置指针会指到下一个字符,然后我们就可以看到从显示屏看到文件中的字符了

不过,这样写感觉不好qaq,我喜欢一整行读取,也就是用getline()函数(不写头文件了,但需要iostream头文件(cout))

int main()

{

 static char arr[10] //静态的字符数组第一个字符为空;

 ofstream File1("Hello World.txt");

 File1 << "Hello World";

 File1.close();

 //读取到满足以下条件之一即可

 //1.读取了9个字符

 //2.遇到字母l

 //3.换行

 ifstream File2("Hello World.txt");

 File2.getline(arr, 7, 'l'); //最后2个参数可以任写一个,也可以都写

 cout << arr << endl;

 File2.close();

 return 0;

}

理解上面的程序,以后读取一行数据的时候就很方便了

如果你想要既能写入又能读取文件的操作,那么你可以这样写:

fstream File(“Hello World.txt”, ios::in | ios::out);中间的那个操作符 | 是c语言中按位或,意思是以读和写的方式打开文件,这样你既可以读也可以写了

如果你想用二进制方式对文件进行读/写,那么就要用ios::binary模式

在打开文件之前,我们还应该检查文件是否存在,以下是最常见的检查文件的方法(xfstream为ofstream,ifstream,fstream三者之一):

#include <iostream>

#include <fstream>

#include <cstdlib>

using namespace std;

int main()

{

 xfstream File("Hello World.txt");

 if(!File)

 {

  cout << "Error opening the file!" << endl;

  exit(1);

 }

 File.close(); //如果存在则需要关闭文件

 return 0;

}

上面判断句里面的File是,如果文件存在返回文件的地址,如果文件不存在返回0

ofstream File1;

File1.open("Hello World.txt");

cout << File1.is_open() << endl;

ofstream File2;

cout << File2.is_open() << endl;

is_open()函数会判断文件句柄(对象)是否打开过文件,打开过返回1,没有打开过返回0

文件的读写:

1.get()和put()

ofstream &put(char ch)

ifstream &get(char &ch)

int main()

{

 fstream File("Hello World.txt", ios::out | ios::in);

 char ch;

 ch = 'o';

 File.put(ch);

 File.seekg(ios::beg);

 File.get(ch);

 cout << ch << endl;

 File.close();

 return 0;

}

2.read()和write()

read(unsigned char *buf,int num)

write(const unsigned char *buf,int num)

int main()

{

 fstream File("Hello World.txt", ios::in | ios::out);

 char arr1[20] = "Hello world\n";

 static char arr2[20];

 File.write(arr1, 8);

 File.seekg(ios::beg);

 File.read(arry2, 7);

 cout << arr2 << endl;

 return 0;

}

seekg()函数可以在读取文件时改变文本内置指针的位置

seekg(ios::beg)读取文件时将文本的内置指针指到文件的起始位置

还有seek(ios::end)文本末尾,seekg(-5)读取文件时定位到当前位置的前五个字符seekg(-5, ios::end)读取文件时定位到末尾的前5个字符

检查输入/输出的状态的函数:

1.bad()函数读写过程中出错返回true

2.eof()函数读到文件末尾返回true

3.fail()函数除了bad还有格式错误

4.good()函数以上没有返回true,则它返回true

如果发生错误,你必须使用clear()函数清除错误状态

以下代码供参考:

cout << File.good() << endl;

cout << File.bad() << endl;

File.clear(); //清除错误状态

最后我们再介绍一些函数:

seekp()函数,和前面所说的seekg()函数相似,但seekg()函数是读取文件的时候定位内置指针,而seekp()函数是写入文件的时候定位内置指针

flush()函数会将缓存区的数据在未满前提前写入磁盘中

peek()函数将返回输入流文件的下一个字符,但它不会移动内置指针的位置,而却它返回的是int型,如果想用char型,则需要这样写:char(File.peek())

putback()函数将返回最后一个所读取的字符,同时将内置指针所指的字符向后-1,如果你使用get()函数,再用putback()函数,再用get()函数,那么得到的字符还是同一个

tellg()函数为输入文件流时的内置指针位置

tellp()函数为输出文件流时的内置指针位置

ignore()函数读取文件时,可以略过一定数量的字符,用以下代码讲解:

int main()

{

 ifstream File("Hello World.txt");

 static char arr[20];

 File.ignore(6, 'e');

 File.read(arr, 20);

 cout << arr << endl;

 File.close();

 return 0;

}

ignore()函数从文件头开始定位,如果前·6个字符里面有’e’,则从’e’开始定位,否则从第6个开始定位

哇,终于写完了,希望大家可以帮我指出错误,因为我也是刚学文件操作,最后,谢谢大家看我的博客,谢谢~

c++文件的输入输出的更多相关文章

  1. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式

    ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...

  2. Python核心编程读笔 8: 文件和输入输出

    第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...

  3. C++学习之文件的输入输出

    C++学习之文件的输入输出        一.文件的打开与关闭        1.输出数据到文件        文件的操作需要包含fstream头文件,文件的操作对象为ifstream,ofstrea ...

  4. 【代码笔记】Java文件的输入输出(1)——Java.io包的初步理解

    Java里面文件的输入输出全部在java.io包里面. Java.io包里面所有的类都需要掌握. java.io包里面所有的东西都在上面了. 包里面的相关类.异常等树关系如下 类分层结构 java.l ...

  5. ca76a_c++_流文件打开输入输出文件模式p773

    /*ca76a_c++_流文件打开输入输出文件模式利用文件流打开文件进行输入与输出时的选项in.out.app(附加模式).ate((end)文件打开后,定于文件结尾).trunc(裁剪).binar ...

  6. C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)

    1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...

  7. Python学习笔记六--文件和输入输出

    6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...

  8. IO流(文件字节输入输出

    输入输出流可能有不允许操作,可能有出现错误,必须在try语句中进行 FileOutputStream out1=new FileOutputStream("test1.txt") ...

  9. Python核心编程(第九章)--文件和输入输出

    文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...

  10. 【6】python核心编程 第九章-文件和输入输出

    1.文件对象的内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值) file.flu ...

随机推荐

  1. 了解一些dos常用命令

    备注:[] ——可选项   <>——必填项 DOS 特殊命令应用技巧: 向上箭头“↑”和向下箭头“↓”——回看上一次执行的命令 "Ctrl+C"组合——中断操作 在命令 ...

  2. clone()与image和 cloneTo()

    Mat image = imread("1.png" ) ; Mat image1 ; Mat image1(image) ;//仅是创建了Mat的头部分,image1与image ...

  3. 解决python3.6的UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 28613: illegal multibyte sequence

    这是python3.6的print()函数自身有限制,不能完全打印所有的unicode字符. 主要的是windows下python的默认编码不是'utf-8',改一下python的默认编码成'utf- ...

  4. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.

    https://blog.csdn.net/watermusicyes/article/details/44963773 Context中有一个startActivity方法,Activity继承自C ...

  5. mysql5.7.10开启慢查询

    MySql提供慢SQL日志的功能,能够记录下响应时间超过一定阈值的SQL查询,以便于我们定位糟糕的查询语句. 首先,查询当前mysql数据库是否开启了慢查询日志功能: show VARIABLES l ...

  6. VM虚拟机 Centos7 lnmp环境 配置域名问题 windows浏览器访问的问题

    CentOS7  ip地址为 192.168.0.155 搭有 LNMP集成环境 执行 lnmp vhost add 配置服务器 指定目录的域名 mark.com 这时windows 机器的 浏览器想 ...

  7. 健壮的网络编程IO函数-RIO包

    RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...

  8. python--第三天总结

    [collection系列]1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabc ...

  9. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

  10. MySql安装和基本管理&mysql语句

    MySql安装和基本管理   本章内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下 ...