为什么我的文件/目录操作在Windows上工作正常,但在Linux上不能

Why does my file/dir manipulation works fine on Windows but not on Linux?

本文关键字:工作 但在 不能 Linux Windows 文件 我的 操作 为什么      更新时间:2023-10-16

我正在尝试创建一个文件来处理目录名称"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 上创建。

有什么办法可以通过提升来做到这一点,因为我是新手C++这种外观的典型。

是的,有Boost.Filesystem库,它create_directory功能。你最好使用它,因为它可以更正确地处理不同的分隔符(如/ vs (,而不仅仅是不时替换字符串中的字符。

要存储 path,您应该使用可以从char*std::stringstd::wstring字符串创建的boost::filesystem::path对象,然后使用 operator /= 追加,然后调用 create_directory 或您需要的任何其他方法:

using namespace boost::filesystem;
path p(userName);
p /= "IPM"; // By the way, you should make this constant, don't you?
p /= sFileName;
if (!create_directory(p)) {
    cerr << "Failed to create directory";
}

更完整的 Boost.File system 教程可在此处找到。

相关文章: