C++ 文本文件处理

C++ 文本文件处理

文件流对象

  • #include <iostream>
  • #include <fstream>
  • #include <string>
  • std::ifstream:用于从文件中读取数据的输入文件流类
  • std::ofstream:用于向文件中写入数据的输出文件流类
  • std::fstream:同时具有读写功能的文件流类

打开文件

  • std::ofstream outfile(finename)
  • 判断是否打开
    • outfile.is_open()

读取文件

  • std::ifstream infile(filename)
  • 判断是否打开
    • outfile.is_open()
  • std::getline(infile,line) 读取
    • std::string line;
  • read()函数
  • write()函数

写入文件

  • outfile <<  string << std::endl; 
  • 覆盖写操作
  • 追加写操作
    • std::ofstream appendFile("file.txt", std::ios::app); 
  • 截断写操作
    • std::ofstream truncateFile("file.txt", std::ios::trunc);

关闭文件

  • infile.close()

example 01

#include <iostream>
#include <fstream>
#include <string>

int main() 
{
    std::ofstream outfile("example.txt"); 
    if (outfile.is_open()) 
    {
        outfile << "This is an example file." << std::endl;
        outfile.close();
    }
    else
    {
        std::cout << "Failed to open the file." << std::endl;
    }

    std::ifstream infile("example.txt"); 
    if (infile.is_open()) 
    { 
        std::string line;
        while (std::getline(infile,line)) 
        {
            std::cout << line << std::endl; 
        }
        infile.close();
    }
    else 
    {
        std::cout << "Failed to open the file." << std::endl;
    }

    return 0;
}

example 02

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream outfile("file.txt"); 
    if (outfile.is_open()) 
    {
        outfile << "This is line 1." << std::endl; 
        outfile << "This is line 2." << std::endl; 
        outfile.close();
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
    }

    std::ofstream appendFile("file.txt", std::ios::app); 
    if (appendFile.is_open()) 
    {
        appendFile << "This is a new line 3." << std::endl;
        appendFile.close();
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
    }

    std::ofstream truncateFile("file.txt", std::ios::trunc);

    if (truncateFile.is_open())
    {
        truncateFile << "This is a truncated line 4." << std::endl;
        truncateFile.close(); 
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
    }

    std::ifstream infile("file.txt"); 
    if (infile.is_open()) 
    {
        std::string line;
        while (std::getline(infile, line)) 
        { 
            std::cout << line << std::endl;
        }
        infile.close(); 
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
    }

    return 0;
}

文件指针

  • 文件指针是一个用于指示文件位置的特殊指针。它可以用于在文件中定位、读取和写入数据。
  • seekg() 和 seekp() 这两个函数用于设置输入和输出文件指针的位置.
    • seekg()用于设置输入文件指针的位置
    • seekp()用于设置输出文件指针的位置。
  • tellg()和tellp() : 这两个函数用于获取输入和输出文件指针的当前位置
    • tellg()返回输入文件指针的当前位置(从1开始)
    • tellp()返回输出文件指针的当前位置。
  • eof() : 这个函数用于检测文件是否已经到达末尾(End of File)
    • 当文件指针指向文件末尾时,eof()函数返回true,否则返回false。
  • good() : 这个函数用于检测文件的状态是否良好。
    • 当文件状态正常时,good()函数返回true,否则返回false。

#include <iostream>
#include <fstream>

int main()
{
    std::ofstream outfile("file.txt"); 

    if (outfile.is_open()) 
    {
        outfile << "Hello, World!" << std::endl;
        outfile.close(); 
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
        return 1;
    }

    std::ifstream infile("file.txt"); 

    if (infile.is_open()) 
    {
        char ch;
        infile.seekg(7); 
        infile.get(ch); 
        std::cout << "Character at position 8 is: " << ch << std::endl;
        std::cout << "tellq(): " << infile.tellg() << std::endl;

        infile.seekg(0, std::ios::end); 
        std::streampos fileSize = infile.tellg(); 
        std::cout << "File size: " << fileSize << " characters" << std::endl;
        std::cout << "tellq(): " << infile.tellg() << std::endl;
        infile.close(); 
    }
    else 
    {
        std::cerr << "Failed to open the file." << std::endl;
        return 1;
    }

    return 0;
}

错误处理

  • 文件不存在
  • 文件权限不足
  • 文件格式错误

康摩搜先生升职记

        我有一友,姓康名摩搜,住在八千里之外。此人脾气甚是古怪,常人难以捉摸。即使是我,也只能偶尔几次从他的面目表情中窥出一二。几日前,康摩搜先生高升,请我为他参谋,编织一份“同事眼中的某某某”来糊弄各色人等。现将此文公之于众。

        天生万物而不同,山川风貌,土地人情,世间各异。我东洲乐土,自然是提倡人望高处的。而康先生生活的地方,正巧相反,是倡导学习了水之习性,望低处的。如果有一天,康先生能从山中醒来,用一整天溜达下去,傍晚在山脚安寝,他会乐疯了的。

        然而康先生虽然追求水之风骨,可惜康先生毕竟是肉体凡胎,也有不少尽人志不能成之事。比如说,康先生无论如何也不能选择他将从多高的海拔上醒来。

        水不激则不动,一个把向下若水作为追求的族群,是不会舍低求高的。然而,天不能随人愿,康先生们安寝之后,突然就会有一股神力,将他们抛向空中。高山有脊,仿若人手,接住了也就是接住了,绝不会轻易把康先生们漏下。

        康先生有记日记的习惯,我特摘录几篇如下:

3月1号

        今天开了个好头,昨天被抛得不算太高。

3月2号

        今天开了个好头,昨天被抛得比前天低一些。

3月3号

        今天开了个好头,昨天被抛得比大前天低一些。

3月10号

        今日就糟了大糕。昨天被抛得太高,都到了30区了。

        所谓“区”的概念,这里必定是要介绍的:好奇刻苦,善于钻研之人,想必哪个群类之中都有二一。曾经康先生一族之中,出了个颇有实力的数学家,他将康先生们醒来的地方于图上逐一标记,从低到高划分出自负五到一百共105个区。

        康先生们早上醒来,先看看身在哪个区位。数字俞高,人俞沮丧。

3月11日

        今日虽然也挺糟糕,但是还是略好于昨日的,醒来在29区。

3月12日

        今日虽然也不甚理想,但也好于昨日的,醒来在22区。

3月13日

        今日虽然也不甚理想,但也好于昨日的,醒来在10区。

3月14日

        今日虽然也不甚理想,但看来是在一路向好的,醒来在2区了。

3月15日

        今日大抵是守得云开见月明了,已经是负一区了。

        15日之后,康先生就再没去过正数区。在负数区闲散了三个月,就荣升去也。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++提供了丰富的文本文件处理功能,可以读取、写入和操作文本文件。下面我将简要介绍一些常见的文本文件处理操作。 1. 文件流对象: 在C++中,可以使用`ifstream`和`ofstream`类来创建输入和输出文件流对象。`ifstream`用于从文件中读取数据,而`ofstream`用于向文件中写入数据。 2. 打开文件: 使用文件流对象打开文件是文本文件处理的第一步。可以使用`open()`函数来打开文件,该函数接受一个文件名作为参数。打开文件时,需要指定文件的路径和打开模式(如读取、写入等)。 3. 读取文件: 使用`ifstream`对象可以从文本文件中读取数据。常见的读取操作包括逐行读取、逐个字符读取和读取整个文件内容。可以使用`getline()`函数逐行读取文本文件,使用`get()`函数逐个字符读取,使用`read()`函数读取整个文件内容。 4. 写入文件: 使用`ofstream`对象可以向文本文件中写入数据。常见的写入操作包括逐行写入和逐个字符写入。可以使用`<<`运算符向文件中写入数据,也可以使用`write()`函数写入字符串或字符数组。 5. 关闭文件: 在完成文件操作后,应该及时关闭文件以释放系统资源。可以使用`close()`函数关闭文件。 6. 文件指针: C++提供了文件指针来定位文件中的位置。可以使用`seekg()`函数设置输入文件流的读取位置,使用`seekp()`函数设置输出文件流的写入位置。 7. 错误处理: 在进行文本文件处理时,可能会出现一些错误,如文件不存在、打开失败等。可以使用`fail()`函数检查文件操作是否成功,并使用`clear()`函数清除错误标志。 这些是C++中进行文本文件处理的一些基本操作。有了这些功能,我们可以读取、写入和操作文本文件,实现各种文件处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

River Chandler

谢谢,我会更努力学习工作的!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值