jjzjj

c++ - windows和linux差异: backslash and forward slash in c++

coder 2024-06-15 原文

在windows中我有

std::string graphdir = projDir + "graph\\";
int mkdirsf=_mkdir(graphdir.c_str());

以上在 Windows 中运行良好。但是在 Linux 中,您知道使用了正斜杠 /。所以上面将创建一个名为 graph\ 的文件夹。有没有一种通用的方法可以输入正确的文件夹而不必担心 /\

最佳答案

您甚至可以考虑在 Windows 上使用正斜杠作为目录分隔符。大多数 Windows 库都能够将它们转换为反斜杠(它们实际上不进行转换,但按需要理解它们;其余的是实现细节)

否则,请注意 C++11(或 C++14)标准不知道“文件夹”(您实际上是指 directories ;因为文件夹只是一个 GUI 人工制品;阅读例如 n3337 到查看)。 C++17 有 std::filesystem .

也许您应该考虑其他一些库或框架:Boost , POCO , Qt都知道如何处理常见操作系统(Windows、Linux、MacOSX、Android)上的目录。

一个更重要的问题是“驱动器”号。对于 Windows(甚至某些 MS-DOS)C:/FOO/BAR.TXT(或者,使用反斜杠,C:\FOO\BAR.TXT)和 D:/FOO/BAR.TXT 指的是不同的文件。在 Linux 或 MacOSX 中没有真正的等价物。自 mount points更通用。

最后,文件层次结构约定(和文件系统)因操作系统而异。对于 Linux,请参阅 hier(7)path_resolution(7) .注意 globbing也是操作系统特定的(并且发生不同:在 Unix 系统中,它通常由 shells 完成;在 Windows 上,它可能在每个应用程序中由某些 crt0 类似 runtime system 的东西完成)。对于 Linux,另请参阅 glob(7) .

顺便说一句,也许你可以考虑使用 WSL在你的 Windows 机器上。在幸运的情况下,相同的可执行文件可以在 Linux 和 Windows(在 WSL 下)上运行,这会让您的工作更轻松(当它可用时)。

花时间阅读更多关于 operating systems 的信息和 file systems .我推荐 Operating System: Three Easy Pieces教科书(可免费下载)。

您会发现阅读更多关于您的操作系统的信息很有用。对于 Linux,阅读 ALP (或一些更新的书)然后 syscalls(2)intro(3)等等... 对于 Windows,了解 WinAPI (我不知道),也许通过开始 here .

在 Linux 上,与目录相关的 API 包括 mkdir(2) , chdir(2) , rmdir(2) , getcwd(2) , stat(2) , opendir(3)closedir, readdir(3) , nftw(3)等等……请注意,文件在 Linux 上只是一个 i-node。 (阅读 inode(7) 和关于 hard links )并且可以在几个目录中(或没有),参见 link(2) . AFAIU,这与 Windows 有巨大的不同。

附言。我从未使用过 Windows,也从未为其编写过代码。

关于c++ - windows和linux差异: backslash and forward slash in c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53334046/

有关c++ - windows和linux差异: backslash and forward slash in c++的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  9. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  10. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

随机推荐