为什么我的文件/目录操作在Windows上工作正常,但在Linux上不能
Why does my file/dir manipulation works fine on Windows but not on Linux?
我正在尝试创建一个文件来处理目录名称"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::string
或std::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 教程可在此处找到。
相关文章:
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- C++代码在台式机上工作正常,但在笔记本电脑上则不行
- 实现 DFS 在较短的输入下工作正常,但在较大的输入下会抛出分段错误
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- SIGABRT 和线程相关的异常,但在调试期间工作正常
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- .exe应用程序在windows10中创建新模块时抛出错误,但在windows7中工作正常
- 为什么这在 c++ 中不起作用,但在 python 中工作
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- PlayFunction在DLL中不起作用,但在独立的exe中工作
- mkdir 从命令行工作,但在使用 NFS 时C++失败
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- C++代码在 Linux 上按预期工作,但在 Windows 上则不然
- 设备与Visa在Python中工作的通信,但在C 中不进行
- 错误:从初始值设定项列表向数组赋值;在ubuntu 1004上工作但在14.04上不工作的代码