C++ filebuf 类
例子
使用 filebuf
对象创建文件
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Create a file
filebuf MyFileBuf;
MyFileBuf.open("filename.txt", ios_base::out);
// Write into the file
MyFileBuf.sputn("Hello World!", 12);
// Close the file
MyFileBuf.close();
}
定义和使用
The filebuf
类用于读写文件。在 fstream
、ifstream
和 ofstream
类中内部使用了 filebuf
对象。
The filebuf
类定义在 <fstream>
头文件中。
文件处理函数
文件处理函数用于打开和关闭文件。
open()
The open(filepath, mode)
方法打开 filepath 指定路径的文件。如果文件已打开,则此方法无效。mode 参数是一组标志,指示将如何使用文件。以下标志可用于 mode 参数
ios_base::in
- 文件以读模式打开。ios_base::out
- 文件以写模式打开。ios_base::binary
- 文件内容被视为二进制数据而不是文本。ios_base::ate
- 文件以文件指针位于文件末尾的方式打开。ios_base::app
- 新数据始终写入文件末尾。ios_base::trunc
- 文件打开后,文件内容将被删除。
可以使用 |
运算符组合标志。例如,要以读写模式打开文件,请使用 ios_base::in|ios_base::out
。
filebuf MyFileBuf;
MyFileBuf.open("filename.txt", ios_base::in|ios_base::out);
is_open()
The is_open()
方法返回一个布尔值,如果文件打开,则为 true,如果文件未打开,则为 false。
filebuf MyFileBuf;
cout << MyFileBuf.is_open(); << "\n"; // Displays 0 because the file is not open
MyFileBuf.open("filename.txt");
cout << MyFileBuf.is_open(); << "\n"; // Displays 1 because the file is open
close()
The close()
方法关闭文件。完成文件操作后,最好关闭文件以释放资源。
MyFileBuf.close();
文件指针函数
文件指针是指示在文件中读取或写入位置的内部变量。
文件指针函数用于操作文件指针。有一个 读 文件指针和一个 写 文件指针,但对于普通文件,filebuf
类对两种操作使用相同的指针,因此更改其中一个也会更改另一个。
pubseekpos()
The pubseekpos(position, pointer)
方法将文件指针移动到相对于文件开头的指定位置,并返回新的位置。pointer 属性使用以下标志指定是否移动读指针、写指针或两者:
ios_base::in
- 移动读指针。ios_base::out
- 移动写指针。
可以使用 |
运算符组合这两个标志,例如:ios_base::in|ios_base::out
cout << MyFileBuf.pubseekpos(4, ios_base::in);
pubseekoff()
The pubseekoff(offset, origin, pointer)
方法将文件指针移动到由 offset 指定的相对于指定 origin 的位置,并返回新的位置。
origin 参数必须是以下值之一
ios_base::beg
- 相对于文件开头的偏移量。ios_base::cur
- 相对于当前文件指针位置的偏移量。ios_base::end
- 相对于文件末尾的偏移量。
pointer 属性使用以下标志指定是否移动读指针、写指针或两者:
ios_base::in
- 移动读指针。ios_base::out
- 移动写指针。
可以使用 |
运算符组合这两个标志,例如:ios_base::in|ios_base::out
cout << MyFileBuf.pubseekoff(-5, ios_base::end, ios_base::in);
文件读取函数
in_avail()
The in_avail()
方法返回文件中可读取的字符数。
cout << MyFileBuf.in_avail();
snextc()
The snextc()
方法将文件指针向前移动一个字符,并返回新位置处的字符的 ASCII 值。
cout << MyFileBuf.snextc();
sbumpc()
The sbumpc()
方法返回当前位置处的字符的 ASCII 值,并将文件指针向前移动一个字符。
cout << MyFileBuf.sbumpc();
sgetc()
The sgetc()
方法返回当前位置处的字符的 ASCII 值,而不移动文件指针。
cout << MyFileBuf.sgetc();
sgetn()
sgetn(destination, n)
方法从文件读取 n 个字符,并将它们写入由 destination 参数指定的 char
数组。该方法返回读取的字符数量。
char destination[20];
int amount = MyFileBuf.sgetn(destination, 19);
destination[amount] = '\0'; // Add a null terminating character to the string
cout << destination;
文件写入函数
sputc()
sputc()
方法将字符写入当前位置,然后将文件指针向前移动一个字符。该方法返回写入的字符的 ASCII 值。
cout << MyFileBuf.sputc();
sputn()
sputn(source, n)
方法将由 source 参数指定的 char
数组中的 n 个字符写入文件。文件指针向前移动 n 个字符。该方法返回写入文件的字符数量。
char source[] = "Hello World!";
int num = MyFileBuf.sputn(source, 12);
cout << num << " characters were written to the file";