Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ If...Else C++ Switch C++ While 循环 C++ For 循环 C++ Break/Continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归

C++ 类

C++ 面向对象编程 C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构 & STL C++ 向量 C++ 列表 C++ 堆栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++ 如何

C++ 加两个数 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 例子

C++ 例子 C++ 现实例子 C++ 编译器 C++ 练习 C++ 测试 C++ 证书


C++ filebuf

❮ fstream 类


例子

使用 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 类用于读写文件。在 fstreamifstreamofstream 类中内部使用了 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";

❮ fstream 类

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.