本篇文章主要讨论C++的相关操作。
使用stream(流)的概念进行输入输出。1.插入器(<<) 标准输出流,写文件或输出字符到显示器;2.析取器(>>) 标准输入流,读文件或从显示器中读字符。
文件操作使用stream的子类fstream实现,需要头文件.fstream有两个子类,ifstream默认以输入方式打开,ofstream默认以输出方式打开.
#include <fstream>
1-> 打开文件
fstream类中有一个成员函数open(),用来打开文件,原型:
void open(const char* filename,int mode,int access);
参数说明:
filename---要打开的文件名
mode----要打开文件的方式
access---打开文件的属性
只有一个文件名参数时默认以读写普通文件打开。
mode | access | ||
ios::app | 以追加方式打开文件 | 0 | 普通文件 |
ios::ate | 文件打开后定位到文件尾,ios::app包含此属性 | 1 | 只读文件 |
ios::binary | 以二进制的方式打开文件 | 2 | 隐含文件 |
ios::in/out | 文件以输入/输出方式打开 | 4 | 系统文件 |
ios::trunc | 如果文件村子啊,把文件长度设为0,清楚文件内容? | ||
ios::nocreate | 不创建文件,文件不存在打开失败 | ||
ios::noreplace | 不覆盖文件,如果文件存在打开文件会失败 |
fstream类也可使用构造函数打开文件,构造函数参数与open函数类似,比如
fstream file("D:Test.txt",ios::app);
2-> 读写文件
文本文件的读写使用<< 和 >> 。
<< 写入文件
>> 读取文件
示例:
1 fstream fsFile; 2 fsFile.open("D:Test.csv", ios::app); 3 fsFile << "name,age," << std::endl; //写文件 4 fsFile.close();
另外可以使用操作符格式化输入输出。
std::dec | 十进制输入和输出 |
std::endl | 换行并刷新此流输出 |
std::ends | 输出一个空字符 |
std::hex | 十六进制输入和输出 |
std::oct | 八进制数据输入和输出 |
std::setppxecision(int p) | 设置浮点数的精度位数输出 |
如果给以上文件输入24岁(十六进制输入)的tony老师,如下:
1 int iAge = 24; 2 fstream fsFile; 3 fsFile.open("D:Test.csv", ios::app); 4 fsFile << "Tony,0x" << std::hex << iAge << std::endl; 5 fsFile.close();
查看D:Test.csv如下:
put()函数向文件写入一个字符,fsFile.put(‘c‘);,向文件写入字符c.
get()函数有几种常用的重载;
从文件读出一个字符,ifstream &put(char& c);
从流中读出字符,如果达到文件尾返回EOF,int get();
ifstream &get(char* buf,int num,char delim=‘‘);把字符读到由buf组成的数组直到读入num个字符或遇到delim指定的字符;
读写数据块可以使用read()和write()函数;
3->检测EOF
使用eof()函数检测文件是否到达文件尾,到达文件尾返回非0值,否则返回0,原型是 int eof();
4->文件定位
分为读位置和写位置的定位,对应的函数:
seekg() 设置读位置,输入操作在文件中的位置 istream &seekg(streamoff offset,seek_dir origin);
seekp() 设置写位置 ostream &seekp(streamoff offset,seek_dir origin);
seek_dir表示移动的基准位置,ios::beg--文件开头;ios::cur--当前位置; ios::end--文件结尾。
fsFile.seekp(12,ios::beg);//把文件的写指针从文件开头向后移12个字节
fsFile.seekg(12,ios::cur);//把文件的读指针从当前文职向后移12个字节
5->获取文件大小
fsFile.seekg(0,ios::end); streampos ipos = fsFile.tellg();//返回文件的大小,字节为单位 if(0 == ipos) //判断文件是否为空
6->关闭文件
fsFile.close();
参考:https://www.xuebuyuan.com/3230629.html
原文:https://www.cnblogs.com/Zoya-/p/12334809.html