#include 头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。 #include ofstream //文件写操作,内存写入存储设备if
头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。
#include ofstream //文件写操作,内存写入存储设备ifstream //文件读操作,存储设备读取到内存中fstream //读写操作,对打开的文件可进行读写操作
public member function void open ( const char * filename, iOS_base::openmode mode = ios_base::in | ios_base::out ); void open(const wchar_t *_Filename, ios_base::openmode mode= ios_base::in | ios_base::out, int prot = ios_base::_Openprot);
参数 | filename | mode | prot |
---|---|---|---|
含义 | 操作文件名 | 打开文件方式 | 打开文件属性(应用少) |
ios::in | 为输入(读)而打开文件 |
---|---|
ios::out | 为输出(写)而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有输出附加在文件末尾 |
ios::trunc | 如果文件已存在先删除文件 |
ios::binary | 二进制方式 |
ofstream outfile;outfile.open("Hello.txt",ios::in|ios::out|ios::binary)
0 | 普通文件,打开文件 |
---|---|
1 | 只读文件 |
2 | 隐含文件 |
3 | 系统文件 |
对于文件的属性也可以利用“|”和“+”进行组合使用
ofstream out("\\\",ios::out);ifstream in("\\\",ios::in);fstream fil("\\\",ios::in|ios::out);
当使用默认的方式对文件进行打开时,可以使用成员函数is_open()对文件进行是否已打开的验证。
文本文件的读写可以如同类与控制台交互一样利用"<<”和">>"分别进行写和读,如:
#includeint main(){ ofstream file("out.txt"); if(file.is_open()) { file<<"This is a test"<
#include #include using namespace std;int main(){ char buff[256]; ifstream infile("in.txt"); if(!infile.is_open()) cout<<"Error open"<
状态标志符的验证
有一些验证流的状态的成员函数(所有都返回bool型返回值):
获得和设置流指针
所有输入/输出流对象都有至少一个流指针:
可以使用以下成员函数来读取或配置流指针:
seekg(pos_type position);seekp(pos_type position);
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
seekg ( off_type offset, seekdir direction );seekp ( off_type offset, seekdir direction );
使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。它可以是:
ios::beg | 从流开始位置计算的位移 |
---|---|
ios::cur | 从流指针当前位置开始计算的位移 |
ios::end | 从流末尾处开始计算的位移 |
流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和 seekp的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改。对二进制文件,你可以任意使用这些函数,应该不会有任何意外的行为产生。
// obtaining file size #include #include const char * filename = "test.txt"; int main () { long l,m; ifstream in(filename, ios::in|ios::binary); l = in.tellg(); in.seekg (0, ios::end); m = in.tellg(); in.close(); cout << "size of " << filename; cout << " is " << (m-l) << " bytes.\n"; return 0; } //`获取二进制文件的大小
在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。
文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:
write ( char * buffer, streamsize size );read ( char * buffer, streamsize size );
这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。
// reading binary file #include #include const char * filename = "test.txt"; int main () { char * buffer; long size; ifstream in (filename, ios::in|ios::binary|ios::ate); size = in.tellg(); in.seekg (0, ios::beg); buffer = new char [size]; in.read (buffer, size); in.close(); cout << "the complete file is in a buffer"; delete[] buffer; return 0; } //运行结果: The complete file is in a buffer
来源地址:https://blog.csdn.net/m0_72572822/article/details/126561153
--结束END--
本文标题: C++中fstream
本文链接: https://lsjlt.com/news/411276.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0