You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++中如何限制文件大小并自动创建递增命名的新文件?

如何在C++中实现文件大小限制与自动递增文件名创建?

问题描述

我想要限制文件大小,当文件超过指定大小后让程序自动创建新文件,并自定义新文件的名称(在前一个文件名基础上加1,比如从pass.txt变成pass1.txtpass2.txt...)。目前运行代码时生成的文本文件会迅速超出可有效使用的大小,现有代码片段如下:

#include <iostream>
#include <vector>
#include <string.h>
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

void Crack(string password, vector<char> Chars) {
    ofstream myfile;
    myfile.open ("pass.txt");
    myfile << ... // 这里是写入逻辑
}

实现思路与解决方案

要搞定这个需求,核心得抓两个关键点:实时监控当前文件大小自动生成递增的文件名。我给你整理了一套完整的修改方案,直接替换你现有代码的文件操作部分就行:

  1. 设定文件大小阈值:先定好每个文件允许的最大字节数(比如我下面示例设的是1MB=1024*1024字节,你可以根据自己的需求调整)。
  2. 跟踪文件编号:用一个变量记录当前正在写入的文件序号,初始为0对应pass.txt,后续递增就变成pass1.txtpass2.txt这类。
  3. 封装文件切换逻辑:每次写入前检查当前文件大小,一旦超过阈值就关掉当前文件,把编号加1,再打开新文件继续写入。

完整代码示例

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;

// 定义每个文件的最大大小(这里设置为1MB,可自行修改)
const size_t MAX_FILE_SIZE = 1024 * 1024;

void Crack(string password, vector<char> Chars) {
    ofstream myfile;
    int currentFileNum = 0;
    // 打开第一个文件
    stringstream fileNameStream;
    fileNameStream << "pass" << (currentFileNum == 0 ? "" : to_string(currentFileNum)) << ".txt";
    myfile.open(fileNameStream.str());

    // 假设这里是你的写入逻辑,比如循环生成密码并写入
    for (/* 你的循环条件 */) {
        string content = "生成的密码内容\n"; // 替换成实际要写入的内容

        // 检查当前文件是否即将超过阈值
        if (myfile.tellp() + content.size() > MAX_FILE_SIZE) {
            // 关闭当前文件
            myfile.close();
            // 递增文件编号
            currentFileNum++;
            // 生成新文件名并打开
            fileNameStream.str(""); // 清空流
            fileNameStream << "pass" << currentFileNum << ".txt";
            myfile.open(fileNameStream.str());
        }

        // 写入内容
        myfile << content;
    }

    // 最后关闭文件
    if (myfile.is_open()) {
        myfile.close();
    }
}

int main() {
    // 调用Crack函数的示例
    vector<char> chars = {'a','b','c'};
    Crack("target", chars);
    return 0;
}

关键代码解释

  • myfile.tellp():获取当前文件指针的位置,也就是文件当前的字节大小,用来判断是否要切换文件。
  • 文件名生成:用stringstream拼接基础文件名和编号,当currentFileNum为0时,生成pass.txt,之后自动带上递增数字。
  • 阈值检查:在写入新内容前,先算一下当前文件大小加新内容的大小会不会超阈值,避免单次写入直接把文件撑爆。

这样修改后,程序会自动在文件达到指定大小后切换到新的递增命名文件,刚好解决你的问题。

内容的提问来源于stack exchange,提问作者joseu muses

火山引擎 最新活动