C语言读写文件和C++读写文件

  1. 文本文件读写

    • "r":只读模式打开文本文件,文件必须存在。
    • "w":写入模式打开文本文件,如果文件不存在则创建新文件。
    • "a":追加模式打开文本文件,如果文件不存在则创建新文件。
    • "r+":读写模式打开文本文件,文件必须存在。
    • "w+":读写模式打开文本文件,如果文件存在则清空文件内容,如果文件不存在则创建新文件。
    • "a+":读写模式打开文本文件,如果文件存在则在文件末尾追加内容,如果文件不存在则创建新文件。
  2. 二进制文件读写

    • "rb":只读模式打开二进制文件,文件必须存在。
    • "wb":写入模式打开二进制文件,如果文件不存在则创建新文件。
    • "ab":追加模式打开二进制文件,如果文件不存在则创建新文件。
    • "r+b":读写模式打开二进制文件,文件必须存在。
    • "w+b":读写模式打开二进制文件,如果文件存在则清空文件内容,如果文件不存在则创建新文件。
    • "a+b":读写模式打开二进制文件,如果文件存在则在文件末尾追加内容,如果文件不存在则创建新文件。

C语言读取文件示例:(有文件则读取,将文件中的大写字母转换为小写字母,没有则创建,写入,在转换) 

#include <stdio.h>

int main() {
	FILE* original_file, * temp_file;
	errno_t err;
	char buffer[100];

	// 使用 fopen_s() 函数打开原始文件(有则打开,没有则创建)
	err = fopen_s(&original_file, "./example.txt", "r");
	if (err != 0) {
		// 文件不存在,创建新文件并写入大写字母
		err = fopen_s(&original_file, "./example.txt", "w");
		if (err != 0) {
			printf("无法创建文件\n");
			return 1;
		}
		fprintf(original_file, "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n");
	}

	// 打开临时文件
	errno_t err1 = fopen_s(&temp_file, "./temp.txt", "w");

	if (err1 != 0) {
		printf("无法打开,错误码:%d\n", err1);
		return 1;
	}

	// 读取原始文件内容并修改后写入临时文件
	while (fgets(buffer, sizeof(buffer), original_file) != NULL) {
		// 进行内容修改(这里仅作示例,实际修改逻辑根据需求编写)
		// 这里将示例中的大写字母转换为小写字母
		for (int i = 0; buffer[i] != '\0'; ++i) {
			if (buffer[i] >= 'A' && buffer[i] <= 'Z') {
				buffer[i] += 32;  // 转换为小写字母
			}
		}

		// 将修改后的内容写入临时文件
		fputs(buffer, temp_file);
	}

	// 关闭原始文件和临时文件
	fclose(original_file);
	fclose(temp_file);

	// 删除原始文件
	remove("example.txt");

	// 将临时文件重命名为原始文件
	rename("temp.txt", "example.txt");

	printf("文件修改完成\n");

	return 0;
}

 C++示例:

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

int main() {
    // 原始文件名
    std::string filename = "original_file.txt";

    // 打开文件进行读取和转换
    std::ifstream inputFile(filename);
    if (!inputFile.is_open()) {
        // 如果文件不存在,则创建新文件并写入初始内容
        std::ofstream outputFile(filename);
        if (!outputFile.is_open()) {
            std::cerr << "无法创建文件" << std::endl;
            return 1;
        }
        outputFile << "INITAL CONTENT FOR new file." << std::endl;
        std::cout << "文件创建成功,已写入数据:" << std::endl;

        outputFile.close();
        // 再次打开文件进行读取和转换
        inputFile.open(filename);
        if (!inputFile.is_open()) {
            std::cerr << "无法打开文件" << std::endl;
            return 1;
        }
    }
    // 逐行读取文件内容并打印
    std::cout << "转换前的文件内容:" << std::endl;
    std::string line;
    while (std::getline(inputFile, line)) {
        std::cout << line << std::endl;
    }
    inputFile.clear();  // 清除文件状态标志
    inputFile.seekg(0); // 将文件指针移动到文件的开头位置

    // 读取并转换文件内容
    std::string content;
    char ch;
    while (inputFile.get(ch)) {
        //before.push_back(ch);
        if (std::isupper(ch)) { // 如果是大写字母,则转换为小写字母
            ch = std::tolower(ch);
        }
        else if (std::islower(ch)) { // 如果是小写字母,则转换为大写字母
            ch = std::toupper(ch);
        }
        content.push_back(ch);
    }

    // 关闭文件
    inputFile.close();

    // 写入转换后的内容到文件
    std::ofstream outputFile(filename);
    if (!outputFile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
    outputFile << content;
    outputFile.close();
  
    // 打印转换后的内容
    std::cout << "转换后的文件内容:" << std::endl;
    std::cout << content << std::endl;
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值