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++ ifstream

❮ fstream 类


示例

使用 ifstream 从文件中读取行

// Create a text string, which is used to output the text file
string myText;

// Read from the text file
ifstream MyReadFile("filename.txt");

// Use a while loop together with the getline() function to read the file line by line
while (getline (MyReadFile, myText)) {
  // Output the text from the file
  cout << myText;
}

// Close the file
MyReadFile.close(); 

运行示例 »


定义和用法

The ifstream 类(缩写为“输入文件流”)用于从文件中读取数据。

The ifstream 类定义在 <fstream> 头文件中。

要打开文件,请将文件路径传递给构造函数。

ifstream MyReadFile("filename.txt");

The ifstream 类有许多方法可以从文件中读取数据。一种简单的方法是使用 getline() 函数读取直到下一个换行符的所有字符,并将它们写入字符串中。

从文件中输出一行文本

string myText;
getline(MyReadFile, myText);
cout << myText;

文件读取函数

文件读取函数从文件中提取字符并移动文件指针。

get()

The get() 方法从文件中读取一个字符,并将其 ASCII 值作为 int 值返回。将其转换为 char 类型以查看字符。文件指针移至文件中的下一个字符。

char myChar = MyReadFile.get();
cout << myChar;

The get(destination, size, delimiter) 方法将从文件中读取的数据写入到目标位置,最多写入 size 个字符。它在到达换行符、文件末尾或由 delimiter 参数给出的可选字符时停止读取。写入 destination 的值总是以 \0 空字符结尾。此方法将文件指针移至它停止读取的换行符或分隔符。

char destination[20];
MyReadFile.get(destination, 20);
cout << destination << "\n";

// Stop reading when a '.' is found
MyReadFile.get(destination, 20, '.');
cout << destination << "\n";

getline()

The getline(destination, size, delimiter) 方法与 get(destination, size, delimiter) 方法相同,只是换行符或分隔符被丢弃,文件指针被移至其后的字符。

char destination[20];
MyReadFile.getline(destination, 20);
cout << destination << "\n";

// Stop reading when a '.' is found
MyReadFile.getline(destination, 20, '.');
cout << destination << "\n";

还有一个类似的 getline(stream, destination, delimiter) **函数**,它读取从 stream 参数中的 ifstream 对象指定的文件中读取直到下一个换行符(或可选的 delimiter)的所有字符,并将它们写入 destination 指定的字符串中。

string destination;
getline(MyFile, destination);
cout << destination << "\n";

// Stop reading when a '.' is found
getline(MyFile, destination, '.');
cout << destination << "\n";

read()

The read(destination, n) 方法从文件中读取 n 个字符,并将它们写入由 destination 参数指定的 char 数组中。与其他函数不同,它不会在换行符处停止读取,也不会在数据中添加空字符。

char destination[20];
MyReadFile.read(destination, 19);
destination[20] = '\0'; // Make sure it ends with a null terminating character
cout << destination << "\n";

peek()

The peek() 方法从文件中读取一个字符,并将其 ASCII 值作为 int 值返回。将其转换为 char 类型以查看字符。与 get() 方法不同,此方法不会移动文件指针。

char myChar = MyReadFile.peek();
cout << myChar;

gcount()

The gcount() 方法返回最近调用过的文件读取方法从文件中提取的字符数。

char destination[20];
MyReadFile.getline(destination, 20);
cout << MyReadFile.gcount() << "\n";

文件处理函数

文件处理函数打开、关闭和导航文件。

open()

The open(filepath) 方法打开 filepath 指定路径的文件。如果文件已打开,则此方法不会有任何效果。

ifstream MyReadFile;
MyReadFile.open("filename.txt");

is_open()

The is_open() 方法在文件打开时返回 true,在没有打开文件时返回 false。

ifstream MyReadFile;
cout << MyReadFile.is_open(); << "\n"; // Displays 0 because the file is not open
MyReadFile.open("filename.txt");
cout << MyReadFile.is_open(); << "\n"; // Displays 1 because the file is open

close()

The close() 方法关闭文件。在完成文件操作后关闭文件以释放资源是一个好习惯。

MyReadFile.close();

rdbuf()

The rdbuf() 方法返回指向内部 filebuf 对象的指针,该对象直接处理文件。

filebuf * buf = MyReadFile.rdbuf();

unget()

The unget() 方法将文件指针向后移动一个字符。

使用 unget() 方法打印同一个字符两次

char myChar = MyReadFile.get();
cout << myChar << "\n";
MyReadFile.unget();
myChar = MyReadFile.get();
cout << myChar;

seekg()

The seekg(position) 方法将文件指针移动到相对于文件开头指定的位置

MyReadFile.seekg(6)

The seekg(position, origin) 方法将文件指针移动到相对于origin指定的文件中的位置origin 有三个可能的值

  • ifstream::beg - 位置相对于文件的开头。
  • ifstream::cur - 位置相对于当前文件位置。
  • ifstream::end - 位置相对于文件的结尾。

将文件指针移动到不同的位置

MyReadFile.seekg(6, ifstream::beg);
cout << MyReadFile.tellg(); << "\n";
MyReadFile.seekg(-3, ifstream::cur);
cout << MyReadFile.tellg(); << "\n";
MyReadFile.seekg(-4, ifstream::end);
cout << MyReadFile.tellg(); << "\n";

tellg()

The tellg() 方法返回文件指针在文件中的当前位置。

cout << MyReadFile.tellg();

提取运算符

The >> 提取运算符从文件中的当前位置读取一定数量的字符,解释它们并将解释后的值写入变量。然后文件指针移动到尚未读取的下一个字符。字符的解释方式取决于变量的数据类型。

语法

MyReadFile >> variable

它也可以多次使用来依次读取文件的各个部分。

MyReadFile >> variable1 >> variable2 >> variable3

The >> 提取运算符首先跳过空白字符(空格、制表符和换行符),直到遇到第一个不是空白字符的字符。之后,它将根据变量的数据类型遵循下表中所示的规则。

数据类型 描述 例子
int
long
short
读取一系列数字并将其解释为整数。该序列可以以符号(“+”或“ -”)开头。它在遇到第一个不是数字的字符时停止读取。
如果未找到有效的序列,ifstream 对象将失败并停止进一步读取。
  15
+125
 -30
bool 以与上述相同的方式读取整数,然后将 0 解释为false,将 1 解释为true。任何其他整数值都将解释为true,但ifstream 对象将失败并停止进一步读取。
下一节中描述的boolalpha 操纵器将完全改变这种行为。
   0
   1
 +01
float
double
读取有效的字符序列并将其解释为浮点数。有效序列至少包含一位数字,可以以符号(“+”或“ -”)开头,可以后跟小数点和小数位。科学记数法(一个数字后跟“e”或“E”以及一些数字)也可以使用。
如果未找到有效的序列,ifstream 对象将失败并停止进一步读取。
 5
-5.46
+2e4
-1.62E-5
char 从文件读取单个字符。
如果文件指针位于文件的末尾,ifstream 对象将失败并停止进一步读取。
B
string
char *
读取所有字符,直到遇到下一个空白字符(空格、制表符或换行符)、空终止符或文件末尾。该变量将添加一个\0 空终止符到值。
如果文件指针已经位于空终止符处或文件的末尾,ifstream 对象将失败并停止进一步读取。
Hello

操纵器

操纵器可以用来代替变量。当使用操纵器时,它们会改变ifstream 对象如何解释数据。操纵器的效果会一直持续,直到另一个操纵器改变它为止。

下表列出了ifstream 对象可以使用的操纵器列表。

操纵器 描述
noskipws The >> 提取运算符将读取空白字符,而不是跳过它们。这主要对char 类型变量有用,因为对于其他数据类型,它在遇到空白字符时会停止读取。
skipws 重置noskipws 操纵器所做的更改。
ws 将文件指针移动到文件中没有空白字符的下一个位置。
hex 使用整数变量时,期望数字的十六进制表示形式(数字 0 到 9 以及 A 到 F)。
oct 使用整数变量时,期望数字的八进制表示形式(数字 0 到 7)。
dec 使用整数变量时,期望数字的十进制表示形式(数字 0 到 9)。这将重置hexoct 操纵器所做的更改。
boolalpha 读取布尔变量的数据时,它会寻找字符序列“true”或“false”,而不是寻找整数。
noboolalpha 重置boolalpha 操纵器所做的更改。

示例

使用操纵器来改变数据解释方式

bool myBool;
int myInt;

// Interpret character sequences "true" and "false" as boolean values
MyFile >> boolalpha >> myBool;

// Revert to reading booleans normally
MyFile >> noboolalpha;

// Read hexadecimal numbers from the file and interpret them as integers
MyFile >> hex >> myInt;

// Revert to reading integers normally
MyFile >> dec;

❮ 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.