C++:文件内容完全读入

本文讲述了在C++中使用std::getline()函数正确读取文件内容,避免因空格导致内容不完整的问题,同时介绍了read()和get()函数的用法,以及处理文件内容的不同方法。
摘要由CSDN通过智能技术生成

在上一篇文章中我留下了一点小坑:使用>> 运算符,这个运算符默认将空格作为分隔符,所以在文件内容读取的时候发现在读到空格时就会停止读取,导致读取内容不完整,这显然不符合日常的使用用能,那么今天就来讨论以下如何将文件内容完全读取。

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" 的文件,读取文件的第一行内容,并将其输出到标准输出流(通常是终端)。如果文件打开失败,则输出一条错误消息。

  1. std::ifstream inFile;:创建了一个 std::ifstream 类型的文件输入流对象 inFile,用于读取文件内容。

  2. inFile.open("File.txt");:打开名为 "File.txt" 的文件,准备读取内容。如果文件打开成功,则可以从中读取数据。如果文件打开失败,则输出一条错误消息,并返回 1。

  3. if (!inFile.is_open()) { ... }:检查文件是否成功打开。如果文件未成功打开,输出一条错误消息,并返回 1。

  4. char szBuffer[100] = {0};:创建了一个大小为 100 的字符数组 szBuffer,用于存储文件内容。数组中所有元素初始化为 0。

  5. inFile.getline(szBuffer, sizeof(szBuffer));:使用 getline() 函数从文件流中读取一行数据,并将其存储到 szBuffer 中。这样可以确保读取到整行内容,不会受到空格的影响。

补充:getline()函数

basic_istream& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count)

该函数的两个参数分别表示:

1.字符数组或字符指针,用于存储从输入流中读取的内容。
2.表示最多读取多少个字符(包括终止符)。
  1. std::cout << szBuffer << std::endl;:将 szBuffer 中的内容输出到标准输出流,通常是终端。

  2. std::cout << "文件读取成功" << std::endl;:输出一条消息,表示文件读取成功。

  3. system("pause");:暂停程序的执行,等待用户按下任意键继续。这样可以防止程序运行后立即关闭窗口,以便查看输出结果。

  4. 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;
}

可以通过上述代码逐字符读取文件内容并输出到终端

读取文件的方式远远不止我所说的这三种,欢迎补充!

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值