2017-07-07 251 views
0

我是C++编程和Visual Studio 2015工作的新手。我想要在特定路径中创建具有当前日期名称的文件夹。我在互联网上搜索,但我无法找到满意的解决方案。此外,我尝试了我自己,但不幸的是结果并不成功。 我用_mkdir()和CreateFolder()。例如,如果我今天编译程序(07.07.2017),那么它应该创建一个名称为“07072017”的文件夹,如果我再次编译它,那么它应该显示消息:“文件夹已经存在”。使用C++创建当前日期的文件夹

在此先感谢。

+0

因此,“今天的日期”是指编译日期? 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) –

+0

@FedericoklezCulloca它应该在我运行程序时创建一个文件夹。 – DNS

+0

那么,将日期分配给std :: string,将其修改为所需的格式,如果目录尚不存在,则将其传递给mkdir()? – stijn

回答

1

如前所述通过@ user8210143您可以使用C++标准库的实验位。

如果日期格式是你的目的并不重要,你可以只使用__DATE__编译器定义:

Live On Coliru

#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 

在我的系统上

+0

谢谢你的帮助。该守则完美运作。 – DNS

+0

我可以更改创建目录的路径吗?例如,我想在“E:/ ProjectWork/Project/MyWork”中创建一个文件夹。因为当我使用current_path()时,它正在创建一个保存程序的文件夹。 – DNS

+0

使用'current_path()'明显使用...当前路径(这是[工作目录](https://en.wikipedia.org/wiki/Working_directory)。当然你可以。为什么这是一个问题?只需填写任何你想要的方式:'fs :: path(“E:/ ProjectWork/Project/MyWork”)/ __DATE __;' – sehe

-1

下面是使用<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; 
} 
+0

@ user821043 while runnuing your Code我得到了thiis错误:ConsoleApplication1.exe中的0x77B0A9F2未处理的异常:Microsoft C++异常:内存位置0x00AFF504处的std :: experimental :: filesystem :: v1 :: filesystem_error。 – DNS

+1

这可以使用可移植的C++而不是“Visual Studio”来回答。另外,memcpy和new在现代C++中没有地位。这是不好的建议。 – sehe

+0

'delete',缺少异常安全(泄漏),'使用名称空间'(请参阅https:// stackoverflow。COM /问题/ 1452721 /为什么 - 是 - 使用名称空间-STD-认为坏实践)。感谢你的贡献,我意识到你刚刚开始。请记住,在SO上回答是再次学习现代C++的快速通道,所以反馈对我们来说真的只是额外的胜利! – sehe

相关问题