c++ - 为什么我的文件/目录操作在 Windows 上可以正常工作,但在 Linux 上却不行?

标签 c++ linux windows

我正在尝试在目录名称“IPM”(即我的项目名称)中创建一个用于处理 session 的文件。

每次用户登录和注销时,我都会访问这个文件,而且我还会在更多地方访问它,因此我创建了这个函数来创建路径字符串,以便在不同操作系统上创建文件的位置

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 功能。您最好使用它,因为它可以更恰本地处理不同的分隔符(例如 /\),而不是时不时地替换字符串中的字符。

要存储路径,您应该使用 boost::filesystem::path对象,可以从 char* 创建, std::stringstd::wstring字符串,然后使用 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.Filesystem 的更完整教程 here .

关于c++ - 为什么我的文件/目录操作在 Windows 上可以正常工作,但在 Linux 上却不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133223/

相关文章:

java - 为什么我每次尝试运行 android studio 应用程序时都会遇到相同的错误?

c++ - 在控制台应用程序中与空的 Windows 消息队列作斗争

c++ - 从 C++ 中的链表中删除一个元素

c++ - 不完整类 c++ 的无效使用?

linux - 无法使用 ANT 创建 tar

python - 在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

linux - 如何正确使用 Siege 对 GET 请求进行基准测试?

c++ - 运行时的动态库与静态库

c++ - Eclipse IDE 使 : *** No rule to make target. ..... 需要 'core/abi.cpp.o' 。停止

c++ - 在 GDI+ 中使用 DrawString 函数绘制文本时如何描边?