C++学习之文件操作

简介: C++学习之文件操作

文件类型

常用的文件类型有很多,以下是一些常见的文件类型及其用途:

  1. 文本文件(.txt):纯文本格式的文件,可以存储简单的文本内容。
  2. Word 文档(.doc/.docx):用于创建、编辑和保存包含文本、图表、图像等多种内容的文档。
  3. PDF 文件(.pdf):可移植文档格式,用于以不受操作系统和应用程序限制的方式共享文档。
  4. 电子表格文件(.xls/.xlsx):用于创建、编辑和组织数据表格的文件格式。
  5. PowerPoint 演示文件(.ppt/.pptx):用于创建、展示和分享演示文稿和幻灯片。
  6. 图像文件(.jpg/.png/.gif):存储图像的常见文件格式,用于显示和共享图像。
  7. 音频文件(.mp3/.wav/.aac):存储音频数据的文件,用于播放和分享音频。
  8. 视频文件(.mp4/.avi/.mov):存储视频的文件,用于播放和分享视频。
  9. 压缩文件(.zip/.rar):将多个文件或文件夹打包并压缩在一起,以节省存储空间和方便传输。
  10. 数据库文件(.mdb/.sql):存储数据的文件,通常用于管理和处理大量结构化信息。

以上只是一些常用的文件类型,实际上还有许多其他不同用途和扩展名的文件类型。不同的文件类型适用于不同的用途和应用。

对于程序来说,文件读写通常可以分为文本文件和非文本文件两种类型。

  1. 文本文件:文本文件是以纯文本形式存储的文件,其中包含的数据是可读的字符数据。在读取或写入文本文件时,程序会按照字符的形式进行操作,可以逐行读取文本内容,进行文本搜索、替换等操作。常见的文本文件包括 .txt、.csv、.xml 等。
  2. 非文本文件:非文本文件则是二进制格式存储的文件,其中包含的数据不易被人类直接阅读理解,需要特定的程序进行解析和处理。常见的非文本文件包括图片文件(.jpg、.png)、音频文件(.mp3、.wav)、视频文件(.mp4、.avi)、压缩文件(.zip、.rar)等。

在程序中,读写文本文件和非文本文件需要采用不同的方式和处理方法。读写文本文件一般通过字符流或文本读写器进行操作,而读写非文本文件则需要使用字节流或二进制读写器来操作。开发者需要根据文件的类型选择合适的读写方式,确保数据的正确加载和保存。

C++ 读文本文件

在 C++ 中,读取文本文件有多种方式,可以根据需求选择最适合的方法。以下是几种常见的读取文本文件的情况和对应的代码解释和示例:

情况一:逐行读取文本文件

#include <fstream>
#include <iostream>
#include <string>
int main() {
    std::ifstream file("example.txt");
    std::string line;
    if (file.is_open()) {
        while (std::getline(file, line)) {
            std::cout << line << std::endl;
        }
        file.close();
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}

上述代码会打开名为 “example.txt” 的文本文件,并逐行读取其中的内容,然后将每行内容输出到控制台。

情况二:按单词读取文本文件

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
int main() {
    std::ifstream file("example.txt");
    std::string word;
    if (file.is_open()) {
        while (file >> word) {
            std::cout << word << std::endl;
        }
        file.close();
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}

上述代码会打开名为 “example.txt” 的文本文件,并按单词(以空格或换行符分隔)读取文件内容,然后输出每个单词到控制台。

情况三:读取整个文本文件内容

#include <fstream>
#include <iostream>
int main() {
    std::ifstream file("example.txt");
    std::string content;
    if (file) {
        file.seekg(0, std::ios::end);
        content.resize(file.tellg());
        file.seekg(0, std::ios::beg);
        file.read(&content[0], content.size());
        file.close();
        std::cout << content << std::endl;
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}

上述代码会打开名为 “example.txt” 的文本文件,并将整个文件内容一次性读取到一个字符串中,然后将字符串内容输出到控制台。

以上是几种在 C++ 中读取文本文件的方式,根据具体需求可选择适合的方法。在实际应用中,需要注意文件打开是否成功、文件读取时的异常处理,在使用完文件后要及时关闭文件流,以避免资源泄漏等问题。

C++ 写文本文件

在C++中,可以使用多种方法来写入文本文件。下面是几种常见的情况解说和代码示例:

  1. 使用ofstream类写入文本文件:
#include <iostream>
#include <fstream>
int main() {
  std::ofstream file("example.txt"); // 创建一个名为example.txt的文件
  if (file.is_open()) {
    file << "Hello, World!" << std::endl; // 写入文本内容
    file.close(); // 关闭文件
    std::cout << "文件写入成功!" << std::endl;
  }
  else {
    std::cout << "无法打开文件!" << std::endl;
  }
  return 0;
}
  1. 使用fprintf函数写入文本文件:
#include <stdio.h>
int main() {
  FILE* file = fopen("example.txt", "w"); // 创建一个名为example.txt的文件
  if (file != NULL) {
    const char* text = "Hello, World!";
    fprintf(file, "%s\n", text); // 写入文本内容
    fclose(file); // 关闭文件
    printf("文件写入成功!\n");
  }
  else {
    printf("无法打开文件!\n");
  }
  return 0;
}
  1. 使用C++11的filesystem库写入文本文件:
#include <iostream>
#include <fstream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
  fs::path filePath = "example.txt";
  
  std::ofstream file(filePath); // 创建一个名为example.txt的文件
  if (file.is_open()) {
    file << "Hello, World!" << std::endl; // 写入文本内容
    file.close(); // 关闭文件
    std::cout << "文件写入成功!" << std::endl;
  }
  else {
    std::cout << "无法打开文件!" << std::endl;
  }
  return 0;
}

在以上示例中,我们分别使用了ofstream类和fprintf函数来创建并写入文本文件,对应的代码通过打开文件流,将文本数据写入文件,并在操作完成后关闭文件。请注意,路径可以根据实际情况进行调整。

需要注意的是,在使用这些方法写入文本文件时,要确保文件路径是可写的,并且对应的文件夹存在。否则可能会出现无法打开文件的情况。

C++ 读二进制文件

在C++中读取二进制文件和读取文本文件略有不同,需要以二进制方式打开文件并使用字节流来读取数据。以下是几种常见情况和代码示例:

  1. 使用ifstream类读取二进制文件:
#include <iostream>
#include <fstream>
int main() {
    std::ifstream file("example.bin", std::ios::binary); // 以二进制模式打开一个名为example.bin的文件
    if (file.is_open()) {
        // 获取文件大小
        file.seekg(0, std::ios::end);
        int fileSize = file.tellg();
        file.seekg(0, std::ios::beg);
        // 读取整个文件内容
        char* data = new char[fileSize];
        file.read(data, fileSize);
        // 在此可以对读取到的二进制数据进行处理
        delete[] data; // 记得释放内存
        file.close(); // 关闭文件
        std::cout << "文件读取成功!" << std::endl;
    }
    else {
        std::cout << "无法打开文件!" << std::endl;
    }
    return 0;
}
  1. 使用fread函数读取二进制文件:
#include <stdio.h>
int main() {
    FILE* file = fopen("example.bin", "rb"); // 以二进制只读模式打开名为example.bin的文件
    if (file != NULL) {
        // 获取文件大小
        fseek(file, 0, SEEK_END);
        long fileSize = ftell(file);
        fseek(file, 0, SEEK_SET);
        // 读取整个文件内容
        char* data = new char[fileSize];
        fread(data, 1, fileSize, file);
        // 在此可以对读取到的二进制数据进行处理
        delete[] data; // 记得释放内存
        fclose(file); // 关闭文件
        printf("文件读取成功!\n");
    }
    else {
        printf("无法打开文件!\n");
    }
    return 0;
}

在以上示例中,我们分别使用了ifstream类和fread函数来读取二进制文件,通过以二进制模式打开文件,并以字节流方式读取文件内容。在读取完成后,可以对读取到的二进制数据进行进一步处理。

记得在读取完文件后,要关闭文件,并释放动态分配的内存,以防止内存泄漏。请注意,路径可以根据实际情况进行调整。

C++ 写二进制文件

在C++中写入二进制文件与写入文本文件类似,也需要以二进制方式打开文件,并使用字节流来写入数据。以下是几种常见情况和代码示例:

  1. 使用ofstream类写入二进制文件:
#include <iostream>
#include <fstream>
int main() {
    std::ofstream file("example.bin", std::ios::binary); // 以二进制模式创建一个名为example.bin的文件
    if (file.is_open()) {
        int data = 12345;
        // 将二进制数据写入文件
        file.write(reinterpret_cast<char*>(&data), sizeof(data));
        file.close(); // 关闭文件
        std::cout << "文件写入成功!" << std::endl;
    }
    else {
        std::cout << "无法打开文件!" << std::endl;
    }
    return 0;
}
  1. 使用fwrite函数写入二进制文件:
#include <stdio.h>
int main() {
    FILE* file = fopen("example.bin", "wb"); // 以二进制只写模式创建名为example.bin的文件
    if (file != NULL) {
        int data = 12345;
        // 将二进制数据写入文件
        fwrite(reinterpret_cast<const void*>(&data), sizeof(data), 1, file);
        fclose(file); // 关闭文件
        printf("文件写入成功!\n");
    }
    else {
        printf("无法打开文件!\n");
    }
    return 0;
}

在以上示例中,我们分别使用了ofstream类和fwrite函数来写入二进制文件。在打开文件时,通过指定ios::binary或"b"标志来设置二进制模式。然后,将要写入的二进制数据转换为char*(对于C++方式),或使用reinterpret_cast强制转换(对于C函数方式)。

需要注意的是,在写入二进制文件时,应确保写入的数据类型和大小是一致的,并且要小心处理大端字节序和小端字节序的问题。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步


相关文章
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
198 0
|
8月前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
135 16
|
9月前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
192 4
2023/11/10学习记录-C/C++对称分组加密DES
|
11月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
361 6
|
11月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
106 1
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
人工智能 分布式计算 Java
【C++入门 一 】学习C++背景、开启C++奇妙之旅
【C++入门 一 】学习C++背景、开启C++奇妙之旅
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
109 0