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函数方式)。

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

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

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


相关文章
|
2天前
|
算法 数据处理 C++
|
2天前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
|
2天前
|
算法 C++ 容器
|
2天前
|
存储 调度 C++
|
2天前
|
存储 安全 C++
|
2天前
|
C++ 索引 容器
|
2天前
|
存储 算法 数据处理