在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
的文件夹。
但是我想要一个根据完整日期和时间命名的文件夹。
我错在哪里或者我错过了什么?
答案 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\\"