我是C++编程和Visual Studio 2015工作的新手。我想要在特定路径中创建具有当前日期名称的文件夹。我在互联网上搜索,但我无法找到满意的解决方案。此外,我尝试了我自己,但不幸的是结果并不成功。 我用_mkdir()和CreateFolder()。例如,如果我今天编译程序(07.07.2017),那么它应该创建一个名称为“07072017”的文件夹,如果我再次编译它,那么它应该显示消息:“文件夹已经存在”。使用C++创建当前日期的文件夹
在此先感谢。
我是C++编程和Visual Studio 2015工作的新手。我想要在特定路径中创建具有当前日期名称的文件夹。我在互联网上搜索,但我无法找到满意的解决方案。此外,我尝试了我自己,但不幸的是结果并不成功。 我用_mkdir()和CreateFolder()。例如,如果我今天编译程序(07.07.2017),那么它应该创建一个名称为“07072017”的文件夹,如果我再次编译它,那么它应该显示消息:“文件夹已经存在”。使用C++创建当前日期的文件夹
在此先感谢。
如前所述通过@ user8210143您可以使用C++标准库的实验位。
如果日期格式是你的目的并不重要,你可以只使用__DATE__
编译器定义:
#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main() {
auto dirname = fs::current_path()/__DATE__;
std::cout << "creating directory " << dirname << "\n";
if (create_directories(dirname)) {
std::cout << "directory didn't exist yet\n";
}
}
它打印像
creating directory "/home/sehe/Projects/stackoverflow/Jul 7 2017"
directory didn't exist yet
在我的系统上
谢谢你的帮助。该守则完美运作。 – DNS
我可以更改创建目录的路径吗?例如,我想在“E:/ ProjectWork/Project/MyWork”中创建一个文件夹。因为当我使用current_path()时,它正在创建一个保存程序的文件夹。 – DNS
使用'current_path()'明显使用...当前路径(这是[工作目录](https://en.wikipedia.org/wiki/Working_directory)。当然你可以。为什么这是一个问题?只需填写任何你想要的方式:'fs :: path(“E:/ ProjectWork/Project/MyWork”)/ __DATE __;' – sehe
如果我们正在讨论windows,你可以尝试使用WINDOWS API CreateDirectory函数。 更多信息:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855(v=vs.85).aspx
使用的argv [0]从main(int argc, char argv[])
让您的.exe当前目录,记得做#include <windows.h>
。你也可以尝试使用参数mkdir folderName来执行shell或cmd.exe。
至于检索当前的日期,我会建议读 How to get current time and date in C++?
下面是使用<experimental/filesystem>
和Visual Studio的例子。
#include "stdafx.h"
#include <iostream>
#include <experimental\filesystem>
using namespace std;
int main() {
int sizeofdate = strlen(__DATE__);
char* dirname = new char[4 + sizeofdate];
memcpy(dirname, "C:/", 3);
memcpy(dirname + 4, __DATE__, sizeofdate);
cout << "creating directory" << endl;
if (!experimental::filesystem::exists(dirname)) {
experimental::filesystem::create_directory(dirname);
}
else {
cout << "directory already exists!" << endl;
}
delete[] dirname;
int thing;
cin >> thing;
return 0;
}
@ user821043 while runnuing your Code我得到了thiis错误:ConsoleApplication1.exe中的0x77B0A9F2未处理的异常:Microsoft C++异常:内存位置0x00AFF504处的std :: experimental :: filesystem :: v1 :: filesystem_error。 – DNS
这可以使用可移植的C++而不是“Visual Studio”来回答。另外,memcpy和new在现代C++中没有地位。这是不好的建议。 – sehe
'delete',缺少异常安全(泄漏),'使用名称空间'(请参阅https:// stackoverflow。COM /问题/ 1452721 /为什么 - 是 - 使用名称空间-STD-认为坏实践)。感谢你的贡献,我意识到你刚刚开始。请记住,在SO上回答是再次学习现代C++的快速通道,所以反馈对我们来说真的只是额外的胜利! – sehe
因此,“今天的日期”是指编译日期? Visual Studio提供了一个'__DATE__'宏,它包含了这个。请参阅[这里](https://webcache.googleusercontent.com/search?q=cache:f8HwK-mNIf8J:https://msdn.microsoft.com/en-us/library/b0084kay.aspx+&cd=1&hl=it&ct = clnk&gl = it&client = firefox-b-ab) –
@FedericoklezCulloca它应该在我运行程序时创建一个文件夹。 – DNS
那么,将日期分配给std :: string,将其修改为所需的格式,如果目录尚不存在,则将其传递给mkdir()? – stijn