无法创建动态文件夹名称

时间:2016-03-03 21:18:35

标签: c++

在C ++中,我想在每次运行程序时创建一个动态文件夹。

#include <direct.h> // mkdir
#include <iostream> // std
#include <iomanip>  // put_time

int main(){
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[40];
    time(&rawtime);
    timeinfo = localtime(&rawtime);
    //strftime(buffer, sizeof(buffer), "%d-%m-%Y %I:%M:%S", timeinfo);
    strftime(buffer, sizeof(buffer), "%d_%m_%Y_%I_%M_%S", timeinfo);
    std::string path = "C:/example/";
    path.append(std::string(buffer));
    mkdir(path.c_str());
    //system("pause");
    return 0;
 }

我想创建一个名为"Example/03_03_2016_20_22_26"的文件夹,但上面的代码不会创建我想要的文件夹。

如果删除path.append(std::string(buffer));行,它将在我的C目录中创建名为example的文件夹。

但是我想要一个根据完整日期和时间命名的文件夹。

我错在哪里或者我错过了什么?

2 个答案:

答案 0 :(得分:3)

我在我的项目中使用此代码用于类似目的(SAVE_DIR是一个宏定义):

#include <time.h>
#include <iomanip>
#include <sstream>

std::ostringstream pathstr; // a convenient way to construct strings
std::time_t now = std::time(nullptr); // get the current time
// insert the required parts into the stream
pathstr << SAVE_DIR
        << std::put_time(std::localtime(&now), "%Y_%m_%d_%H_%M_%S") << ".png";
std::string path = pathstr.str(); // and the result as std::str

输出:

  

/home/user/prog/render/rt/saves/2016_03_03_23_10_50.png

这有利于纯C ++,虽然看起来有点笨拙,取决于你的口味。

至于您的代码可能失败的原因,我首先在调试器中查看字符串值,然后保存mkdir()的返回值并根据规范进行检查:POSIX mkdir()

答案 1 :(得分:0)

我想这个问题出现在斜线中&#39; /&#39; 在Windows上更好地使用反斜杠。 试试

  std::string path="C:\\example\\"