c++文件的输入输出
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++文件的输入输出的更多相关文章
- [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式
ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...
- Python核心编程读笔 8: 文件和输入输出
第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...
- C++学习之文件的输入输出
C++学习之文件的输入输出 一.文件的打开与关闭 1.输出数据到文件 文件的操作需要包含fstream头文件,文件的操作对象为ifstream,ofstrea ...
- 【代码笔记】Java文件的输入输出(1)——Java.io包的初步理解
Java里面文件的输入输出全部在java.io包里面. Java.io包里面所有的类都需要掌握. java.io包里面所有的东西都在上面了. 包里面的相关类.异常等树关系如下 类分层结构 java.l ...
- ca76a_c++_流文件打开输入输出文件模式p773
/*ca76a_c++_流文件打开输入输出文件模式利用文件流打开文件进行输入与输出时的选项in.out.app(附加模式).ate((end)文件打开后,定于文件结尾).trunc(裁剪).binar ...
- C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)
1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...
- Python学习笔记六--文件和输入输出
6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...
- IO流(文件字节输入输出
输入输出流可能有不允许操作,可能有出现错误,必须在try语句中进行 FileOutputStream out1=new FileOutputStream("test1.txt") ...
- Python核心编程(第九章)--文件和输入输出
文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...
- 【6】python核心编程 第九章-文件和输入输出
1.文件对象的内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值) file.flu ...
随机推荐
- 历届试题 小数第n位-(同余公式+快速幂)
问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数. 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式. 本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始 ...
- js高级-浏览器事件循环机制Event Loop
JavaScript 是队列的形式一个个执行的 同一时间只能执行一段代码,单线程的 (队列的数据结构) 浏览器是多线程的 JavaScript执行线程负责执行js代码 UI线程负责UI展示的 Jav ...
- SQL Server和MySQL数据库
导读:接下来的网上商城的项目,需要用到MySQL数据库了.这个对于我来说,是一个新接触的东西,按照惯例,在刚开始学习一个东西的时候,先从宏观上去了解它.本篇博客,先介绍SQL Server的基本内容, ...
- 清除 idea 缓存
idea最好选择 付费版本 ,稳定一点~ 不要选择社区版 1.问题使用idea启动项目时,报如下错误:Intellij Error: Internal caches are corrupted or ...
- 理解 e.clientX,e.clientY e.pageX e.pageY e.offsetX e.offsetY
event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...
- 1.5.3、CDH 搭建Hadoop在安装之前(定制安装解决方案---创建群集主机的虚拟映像)
创建群集主机的虚拟映像 您可以使用预先部署的Cloudera软件创建虚拟机映像,例如PXE启动映像,Amazon AMI和Azure VM映像,这些映像可用于快速启动虚拟机.这些图像使用parcel来 ...
- 游戏AI技术
[Unity3D人工智能编程精粹] 1.运动层.决策层.战略层. 运动层.决策层包含的算法是针对单个角色的,战略层是针对小队乃至更大规模群体的. 导航和寻路是运行层的主要任务. 决策层决定角色下一时间 ...
- uuid生成工具类
public class UUIDTool { public static String getUUID() { return UUID.randomUUID().toString().replace ...
- MONGO的简单语法,新手实用
window上启动方式:(简单略) mongod --dbpath E:\study_lib\mongodb\db --port=27000 show dababases; (创建配置文件的启动方式) ...
- 强制改变css样式优先级
.list{ left:20px!important; } css !important作用是提高指定CSS样式规则的应用优先权. !important是CSS1就定义的语法,作用是提高指定样式规则的 ...