java - 相当于 Paths.get ("abc/def.jpg")在 C 和 C++ 中获取与操作系统无关的路径?

标签 java c++ c path os-agnostic

我想在 Linux 和 Windows 中编写和重用相同的代码,尤其是路径常量。

fopen(base+"subfolder/abc.bin","wb")

当我在 Linux 中针对 Windows 进行交叉编译时,上述代码运行良好。

但是,我必须将代码更改为 fopen(base+"subfolder\\abc.bin","wb") 才能直接在 Windows 中编译它。

现在我已经向软件添加了许多依赖项,如果我交叉编译我的软件,则需要交叉编译,但我不想这样做,因此,我在 Windows 和 Linux 版本的软件中使用预编译的二进制文件。

现在,我面临的问题是,如果我想在 Linux 中编译,我必须更改我不想做的路径,因为我必须维护软件的两个不同分支。有没有一种方法,类似于Java使用Paths.get("abcd/def/hij.bin").toString()。我不只是要求一个系统调用,一个识别底层操作系统并相应地更改路径字符串的自定义函数就可以了。

我需要 C 和 C++。

最佳答案

不确定您是否找到了解决方案,但您可以根据操作系统使用预定义宏更改路径/字符串,示例如下:

    string getFileName(const string& s) {

   char sep = '/';

#ifdef _WIN32
   sep = '\\';
#endif

   size_t i = s.rfind(sep, s.length());
   if (i != string::npos) {
      return(s.substr(i+1, s.length() - i));
   }

   return("");
}

这是一个link有关预定义宏的更多信息。

关于java - 相当于 Paths.get ("abc/def.jpg")在 C 和 C++ 中获取与操作系统无关的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57476045/

相关文章:

c - 使用 for 循环向数组输入值

java - 部署应用程序时未找到 DefaultSpringSecurityContextSource

java - Java中基于时间的计算

c++ - 使用 C++ 实现队列和调整数组大小

c++ - 在 SFML 事件中发送鼠标位置

c - 我不明白这 tu[en-11] 行代码。访问结构成员到底是如何工作的?

c - 混合文本,由 FreeType 以颜色和 alpha 渲染

java - WSDL 更改后 Apache Axis 失败

java - Camel收件人列表不迭代所有收件人

c++ - 模板中的默认参数