gpt4 book ai didi

c++ - 验证在C++中创建多个文件夹和文件的正确方法

转载 作者:行者123 更新时间:2023-12-02 10:11:31 26 4
gpt4 key购买 nike

我正在开发一个个人项目,我的程序执行的第一步之一是,当用户通过控制台应用命令时,创建一些文件夹和文件。
例如。用户通过控制台执行命令 emi -start ,这将触发以下文件和文件夹的创建:

  • emi_base
  • emi_database
  • emi_main_db_file.csv
  • emi_catch_db_file.csv
  • emi_temp_db_file.csv

  • emi_version
  • emi_main_version_folder
  • emi_catch_version_folder
  • emi_temp_version_folder

  • emi_config
  • emi_config_file.txt
  • emi_ignore_file.txt
  • emi_repo_file.txt



  • 为此,我使用类似于以下的代码:
        // Creating folder emi_base
    bool emi_directory_created = fs::create_directory(emi_default_path);
    // Creating folder emi_database and its corresponding files
    bool db_directory_created = fs::create_directory(db_default_path);
    ofstream db_main_file_ostrm(db_main_file, std::ios::out | std::ios::binary);
    ofstream db_catch_file_ostrm(db_catch_file, std::ios::out | std::ios::binary);
    ofstream db_temp_file_ostrm(db_temp_file, std::ios::out | std::ios::binary);
    // Creating folder emi_version and its corresponding sub-folders
    bool version_directory_created = fs::create_directory(version_default_path);
    bool version_main_directory_created = fs::create_directory(version_main_folder);
    bool version_catch_directory_created = fs::create_directory(version_catch_folder);
    bool version_temp_directory_created = fs::create_directory(version_temp_folder);
    // Creating folder emi_config and its corresponding files
    bool config_directory_created = fs::create_directory(config_default_path);

    if (emi_directory_created &&
    db_directory_created &&
    db_main_file_ostrm &&
    db_catch_file_ostrm &&
    db_temp_file_ostrm &&
    version_directory_created &&
    version_main_directory_created &&
    version_catch_directory_created &&
    version_temp_directory_created &&
    config_directory_created) {
    // Code that is executed after validating that all files and folders were created correctly.
    }
    好吧,现在一切正常,但是,我不知道这是否是验证文件夹和相应文件是否已正确创建的最佳方法, 在我看来,将所有这些 bool(boolean) 值放在条件中不是做正确的事情
    有更好的方法吗?有没有更好的方法可以一次或依次验证多个文件夹和文件的创建?
    希望有人可以给这个新手一些反馈:)

    最佳答案

    如果fs::create_directory std::filesystem::create_directory ,则fs::create_directory(<path>)会在无法创建目录的情况下引发异常,您无需检查其返回值:

    The overload that does not take a std::error_code& parameter throws filesystem_error on underlying OS API errors, constructed with p as the first path argument and the OS error code as the error code argument.


    但是您确实需要通过 ofstream::is_open 调用检查文件是否已成功打开。您可能想创建一个帮助函数,该函数打开 ofstream并检查是否成功,然后返回 ofstream,在C++ 11中 ofstream是可移动的,因此可以按值返回。例如。:
    std::ofstream open_ofstream(char const* filename) {
    std::ofstream f(filename, std::ios::out | std::ios::binary);
    if(!f.is_open())
    throw std::system_error{errno, std::system_category(), filename}; // Hoping that std::ofstream didn't mangle errno.
    // or throw std::filesystem::filesystem_error{"failed to open", filename, std::error_code{errno, std::system_category()}};
    return f;
    }

    如果所有目录和文件都位于一个顶级目录中,则可能要先使用其他名称创建它,在其中创建目录/文件结构并初始化文件,然后将顶级目录重命名为最终目录名称。这样,当存在顶级目录时,这意味着它已正确初始化并可以使用。

    关于c++ - 验证在C++中创建多个文件夹和文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63362556/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com