【发布时间】:2017-02-09 09:47:40
【问题描述】:
我正在尝试在目录名称“IPM”(即我的项目名称)中创建一个用于处理会话的文件。
每次用户登录和注销时我都会访问这个文件,而且我还在更多的地方访问它,因此我创建了这个函数来创建一个路径字符串,以便在不同的操作系统上创建文件的位置
std::string SessionManager::createPathString(std::string sFileName)
{
char* pPath = getenv(HOME);
std::string sUserName(pPath);
createDirectory(sUserName);
std::replace(sUserName.begin(), sUserName.end(), '\\', '/');
sUserName.append("/IPM");
sUserName.append("/");
sUserName.append(sFileName);
return sUserName;
}
我调用这个函数来获取文件路径和创建目录的函数是这样的
int createDirectory(std::string sUserName)
{
sUserName += "\\IPM";
#ifdef _WIN32
int ret = _mkdir(sUserName.c_str());
#elif __linux__
int ret = mkdir(sUserName.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
#endif
return ret;
}
它在 windows 上创建一个目录,但在 Linux 上失败,如果目录或文件不存在,它会在 windows 上创建,而不是在 Linux 上。
有没有办法通过 boost 来做到这一点,因为我是 C++ 新手,这看起来很典型。
【问题讨论】:
-
为什么要在 尝试创建目录之后替换反斜杠?
-
Windows 使用反斜杠,Linux 使用正斜杠...stackoverflow.com/questions/38428561/…
-
检查你该死的返回值。
-
@CMouse 可能是,您应该将标题更改为“为什么我的文件/目录操作在 Windows 上运行良好,但在 Linux 上却不行?”否则,有人可能会建议您阅读How do I ask a good question?...
-
谢谢@Scheff 我会做的