c++ - 在 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);
解决方案
您不能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());
这至少摆脱了一个变量。
不必每次调用函数时都使用变量,可以使用表达式调用函数。
推荐阅读
- python-3.x - cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 不工作
- c - 如何获得程序的完整输入流?
- python - Django form.is_valid() 失败的基于类的视图 - Form、SingleObject、DetailMixins
- matlab - IFFT 找到 sin(x^2)?
- sugarcrm - 将产品下拉列表添加到 suitecrm 中的 oppurtunity 模块
- c# - 如何在 C# 中以编程方式创建桌面快捷方式(链接),但使用自己的快捷方式文件扩展名(例如 .appfolder)而不是 .lnk?
- python - kivy 中的嵌入式网络浏览器 | android.config 出错
- jquery - 为什么我的下拉列表中没有列表未定义的数据?
- c - 当串行设备的路径改变时,C 程序停止
- python - 地址簿练习我希望它拆分列表的每一行,但它只需要最后一行