这段代码的功能是生成一个多层级的目录结构,并在每个目录中生成一定数量的文件。代码的大致逻辑如下:

  1. 定义了一些宏和全局变量,如 LEVEL、NUM 和 UUID_LENGTH 等。
  2. 定义了 generate_file 函数,用于在指定的目录中生成一定数量的文件。文件的命名是根据全局变量 num_of_files 的值动态生成的,文件内容是一个随机生成的 UUID 字符串。
  3. 定义了 __mkdir 函数,用于递归创建多层级的目录。函数的参数 level 表示目录层级,path 表示当前目录的路径。函数首先在当前目录中创建一个子目录,并根据全局变量 num_of_direc 的值动态生成子目录的名称。然后根据指定的目录层级,决定是继续递归创建子目录还是在子目录中生成文件。
  4. 在 main 函数中,调用 __mkdir 函数来创建多层级的目录结构。

总体来说,这段代码通过递归调用 __mkdir 函数来创建多层级的目录结构,并在每个目录中生成一定数量的文件。生成的文件名是根据全局变量 num_of_files 的值动态生成的,文件内容是随机生成的 UUID 字符串。

代码示例:

#include <iostream>
#include <string>
#include <fstream>
#include <string.h>

#include <uuid/uuid.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>

#define LEVEL 8
#define NUM 10
#define UUID_LENGTH 36

uint64_t num_of_files = 0;
uint64_t num_of_direc = 0;

void generate_file(const std::string& path)
{
    char str[UUID_LENGTH];
    for (int j = 0; j < NUM; j++) {
        memset(str, 0, UUID_LENGTH);
        std::ofstream file(path + '/' + std::to_string(num_of_files++) + '.txt');
        uuid_t uuid;
        uuid_generate(uuid);
        uuid_unparse(uuid, str);
        file.write(str, strlen(str));
    }
}

// mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);

int __mkdir(int level, const std::string& path)
{
    std::string path_ = path + '/' + std::to_string(num_of_direc++);
    int rc = mkdir(path_.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
    if (rc != 0) {
        std::cerr << 'mkdir failed, errno: ' << errno << ', ' << strerror(errno) << std::endl;
        return -1;
    }
    if (level == 1) {
        generate_file(path_);
    } else {
        for (int i = 0; i < NUM; i++) {
            int rc = __mkdir(level - 1, path_);
            if (rc != 0) {
                std::cerr << '__mkdir failed, errno: ' << errno << ', ' << strerror(errno) << std::endl;
                return -1;
            }
        }
    }

    return 0;
}

int main(int argc, char const *argv[])
{
    __mkdir(LEVEL - 1, '.');
    
    return 0;
}
C++ 代码分析:生成多层级目录结构并填充随机 UUID 文件

原文地址: http://www.cveoy.top/t/topic/mN3B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录