在上一篇文章中我留下了一点小坑:使用>>
运算符,这个运算符默认将空格作为分隔符,所以在文件内容读取的时候发现在读到空格时就会停止读取,导致读取内容不完整,这显然不符合日常的使用用能,那么今天就来讨论以下如何将文件内容完全读取。
1.std::getline()函数进行读取
#include<iostream>
#include<fstream>
int main()
std::ifstream inFile;
inFile.open("File.txt");
if (!inFile.is_open()) {
std::cout << "文件打开失败" << std::endl;
return 1;
}
char szBuffer[100] = {0};
inFile.getline(szBuffer, sizeof(szBuffer));
std::cout << szBuffer << std::endl;
std::cout << "文件读取成功" << std::endl;
system("pause");
return 0;
}
这段代码的目的是打开名为 "File.txt" 的文件,读取文件的第一行内容,并将其输出到标准输出流(通常是终端)。如果文件打开失败,则输出一条错误消息。
-
std::ifstream inFile;
:创建了一个std::ifstream
类型的文件输入流对象inFile
,用于读取文件内容。 -
inFile.open("File.txt");
:打开名为 "File.txt" 的文件,准备读取内容。如果文件打开成功,则可以从中读取数据。如果文件打开失败,则输出一条错误消息,并返回 1。 -
if (!inFile.is_open()) { ... }
:检查文件是否成功打开。如果文件未成功打开,输出一条错误消息,并返回 1。 -
char szBuffer[100] = {0};
:创建了一个大小为 100 的字符数组szBuffer
,用于存储文件内容。数组中所有元素初始化为 0。 -
inFile.getline(szBuffer, sizeof(szBuffer));
:使用getline()
函数从文件流中读取一行数据,并将其存储到szBuffer
中。这样可以确保读取到整行内容,不会受到空格的影响。
补充:getline()函数
basic_istream& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count)
该函数的两个参数分别表示:
1.字符数组或字符指针,用于存储从输入流中读取的内容。 2.表示最多读取多少个字符(包括终止符)。
-
std::cout << szBuffer << std::endl;
:将szBuffer
中的内容输出到标准输出流,通常是终端。 -
std::cout << "文件读取成功" << std::endl;
:输出一条消息,表示文件读取成功。 -
system("pause");
:暂停程序的执行,等待用户按下任意键继续。这样可以防止程序运行后立即关闭窗口,以便查看输出结果。 -
return 0;
:返回值为 0,表示程序正常结束。
运行结果:
read()函数
read函数的用法
istream& read(char* s, streamsize n);
-
s
是一个指向字符数组的指针,表示要存储读取数据的位置。 -
n
是要读取的最大字节数。
read()
函数从当前文件位置开始读取数据,并将读取的数据存储到 s
指向的内存位置中,直到达到指定的字节数 n
或者到达文件末尾为止。
打印文件内容
char szBuffer[100] = {0};
inFile.read(szBuffer, sizeof(szBuffer));
std::cout << szBuffer << std::endl;
std::cout << "文件读取成功" << std::endl;
get()函数
get()
函数是用于逐字符读取文件内容的成员函数,属于 std::ifstream
类。它可以读取一个字符,并将文件读取位置后移一个字符。这个函数可以用来逐个字符地读取文件内容,直到文件结束。
char ch = 0;
while (inFile.get(ch))
{
std::cout << ch;
}
可以通过上述代码逐字符读取文件内容并输出到终端
读取文件的方式远远不止我所说的这三种,欢迎补充!