C++文件 *** 作笔记

C++文件 *** 作笔记,第1张

C++文件 *** 作笔记

笔记:C++程序产生的数据保存文件
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 一、C++文件读写
    • 打开关闭文件
    • 读写文件
    • 检测EOF
    • 读写文件状态标识符验证
    • 文件指针定位
  • 二、例子


一、C++文件读写
  • fstream 可同时读写的文件类
  • ofstream 写 *** 作(out输出)文件类
  • ifstream 读文件(in输入)文件类
打开关闭文件
void open(const char* filename, openmode mode,int access);
  • filename: 要打开的文件名。
  • mode:文件打开方式,如下 :ios::in 输入 ios::out 输出 ios::ate初始位置文件尾 ios::app附加再文件末尾 ios::trunc文件存在则删除文件 ios::binary二进制文件
    标识符可以组合,中间使用"|"间隔
  • access:打开文件的属性取值:
    0:普通文件。1:只读文件。2:隐藏文件。4系统文件

is_open() 函数可以查看文件是否被打开

close()函数,关闭文件。

例如:

fstream Filename;
Filename.open("test.txt", ios::out);
if(Filename.is_open()){}
Filename.close()
读写文件

1、文本文件
使用插入器(<<)向文件输入;用解析器(>>)向文件输入。
例:

Filename.open("...",...);
string str;
Filename<< str;  //向文件写一个字符串
char *buff;
Filename >> buff; //读取字符串到buff中
Filename.close()

该种方式还有一种简单的格式化能力,如下:

  • dec 格式化为十进制数值数据 输入和输出
  • endl 输出一个换行符并刷新此流 输出
  • ends 输出一个空字符 输出
  • hex 格式化为十六进制数值数据 输入和输出
  • oct 格式化为八进制数值数据 输入和输出
  • setpxecision(int p) 设置浮点数的精度位数 输出

例:

Filename << oct << 123456; //把123456当作八进制输出
Filename << setpxecision(3) << 0.123456; //设置小数点为3为输出

2、二进制文件
①put()函数,put()函数向流写入一个字符。
例:

Filename.put('x');//向文件流中写入字符x,若文件中有数据,会替换数据

②get()函数。有3种常用重载形式。
第一种:与put函数对应。

Filename.get(x);//从文件流中获取一个字符,保存在x中。

第二种:从文件流中返回一个字符,到文件末尾返回EOF

char x = Filename.get(); 返回一个字符

第三种:ifstream &get(char *buf, int num, delim='n')
把字符读入由buf指向的数组,读num个字符或遇到了delim指定的字符停止。例:

Filename.get(buf, 3, "a"); //读三个字符到buf中,遇到a停止。

③读写数据块:
读写数据块要用到read()函数和write()函数。函数声明如下:

  • read(unsigned char *buf, int num)
  • write(const unisgned char*buf int num)

read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount()来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。

例:

Filename.read(buff, 5); //从文件中读取5个字符到buff中
int a = Filename.read(buff, 5).gcount();//使用read成员函数gcount查看读取字符数

const char *buff = "i love you";
Filename.write(buff, 5);  //从buff中写5个字符到文件中
检测EOF

成员函数eof()检测是否到达文件末尾。到达返回非0值,未到达返回0。例:

int a = Filename.eof();//可以查看a的值看是否到达文件末尾。
读写文件状态标识符验证

bad()函数,读写过程中出错返回true。
fail()函数,与bad() 同样的情况下会返回 true ,格式错误时也返回true
good()函数,如果调用以上任何一个函数返回true 的话,此函数返回 false

要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数

文件指针定位

tellg()和tellp()
这两个成员函数不用传入参数,返回pos_type 类型的值,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp)。

int a = Filename.tellg();
int a = Filename.tellp();

seekg() 和seekp()
C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:

istream &seekp(streamoff offset, seek_dir origin); //seekp声明
istream &seekg(streamoff offset, seek_dir origin); //seekg声明

offset表示偏移量,origin表示移动的基准位置。
origin参数有:ios::beg 文件开头。 ios::cur 文件当前位置。 ios::end 文件结尾。 [注]这两个函数一般用于二进制文件。

Filename.seekp(5, ios::cur); //当前写位置向后移动5个字符
Filename.seekp(-5, ios::cur); //当前写位置向前移动5个字符
Filename.seekg(5, ios::cur); //当前读位置向后移动5个字符
Filename.seekg(-5, ios::cur); //当前读位置向前移动5个字符
二、例子

在当前工作目录下建文件夹"test,txt"。

#include
#include

using namespace std;

const *buff = "I love you";
char buf[10];
char x;
int main()
{
	fstream Filename;
	Filename.open("test.txt", ios::in|ios::out|ios::binary);
	Filename << "I love you "; //写一个字符串到Filename文件
	Filename >> buf;  //读一个字符到buf指向的缓存中。
	
	Filename.put("x");//写一个字符到文件中
	Filename.get(x);//读一个字符到x中
	
	Filename.read(buf, 5);//从文件中读取5个字符到buf中
	Filename.write(buff, 5);//从buff中写5个字符到文件中
	
	
	Filename.close();
	return 0;
}

参考1
参考2
参考3

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存