首页 > 解决方案 > 在 C++ 中的目录中创建子文件夹会引发语法错误

问题描述

我正在尝试在文件夹中创建一个包含今天日期的子目录。代码编译成功,但在运行时抛出错误。

#include <iostream>
#include <chrono>
#include <sstream>
#include <iomanip>
#include <bits/stdc++.h> 
#include <sys/stat.h> 
#include <sys/types.h> 

using namespace std;

int main()
{    
    // First create the directory with username
    if (mkdir("Anita_", 0777) == -1) 
        cerr << "Error :  " << strerror(errno) << endl; 
    else
        cout << "Directory created"; 
    
    //Pull out system date
    auto const now = std::chrono::system_clock::now();
    auto const in_time_t = std::chrono::system_clock::to_time_t(now);

    std::stringstream ss;
    ss << std::put_time(std::localtime(&in_time_t), "%d_%m_%Y");
    
    //Prepare for subdirectory creating
    std::cout << ss.str() << std::endl;
    string str_="mkdir -p Anita_/ss.str()";
    const char *com=str_.c_str();
    system(com);
    //system("mkdir -p Anita_/ss.str().c_str()");

}

在运行时我收到此错误:

sh:1:语法错误:“(”意外

是否可以使用mkdir()代替 system(),例如mkdir('Anita_/ss.str().c_str()', 0700);

标签: c++

解决方案


您不能ss.str()在双引号内加上并期望 shell 执行 C++ 代码。

相反,您应该在程序中进行评估ss.str()并将结果传递给 shell

string str_ = "mkdir -p Anita_/" + ss.str();
const char *com = str_.c_str();
system(com);

在将该命令传递给 shell之前,此版本用于在您的程序+中附加"mkdir -p Anita_/"和结果。ss.str()

顺便说一句,你不需要两个变量,这一行代码做同样的事情

system(("mkdir -p Anita_/" + ss.str()).c_str());

或者如果这看起来有点复杂,你可以这样做

string str_ = "mkdir -p Anita_/" + ss.str();
system(str_.c_str());

这至少摆脱了一个变量。

不必每次调用函数时都使用变量,可以使用表达式调用函数。


推荐阅读