Windows和Linux的差异:C ++中的反斜杠和正斜杠

时间:2018-11-16 08:30:08

标签: c++ linux windows

我在Windows中拥有

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

以上内容在Windows中效果很好。但是在Linux中,您知道使用了正斜杠/。因此,上面将创建一个名为graph\的文件夹。是否有一种通用的方法可以输入正确的文件夹而无需担心/\

1 个答案:

答案 0 :(得分:11)

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

否则,请注意,C ++ 11(或C ++ 14)标准并不了解“文件夹”(您实际上的意思是directories;因为文件夹只是GUI人工制品;请阅读例如{{ 3}}检查)。 C ++ 17具有n3337

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

一个更重要的问题是“驱动器”字母。对于Windows(甚至是某些MS-DOS),C:/FOO/BAR.TXT(或使用反斜杠,C:\FOO\BAR.TXT)和D:/FOO/BAR.TXT指的是不同的文件。 Linux或MacOSX中没有真正的等效项。由于Qt更笼统。

最后,从一个操作系统到另一个操作系统,文件层次结构约定(和文件系统)差异很大。对于Linux,请参见mount pointshier(7)。请注意,path_resolution(7)也是特定于操作系统的(并且发生的方式有所不同:在Unix系统中,它通常由globbing完成;在Windows上,它可能在每个应用程序中由某些shells完成。类似于crt0)。对于Linux,另请参见runtime system

顺便说一句,也许您可​​以考虑在Windows计算机上使用glob(7)。在幸运的情况下,相同的可执行文件可以在Linux和Windows(在WSL下)上运行,这使您的工作更加轻松(在可用时)。

花点时间阅读有关WSLoperating systems的更多信息。我推荐file systems教科书(可免费下载)。

您会发现对阅读有关您的操作系统的更多信息很有用。对于Linux,请先阅读Operating System: Three Easy Pieces(或一些新书),然后再阅读ALPsyscalls(2)等。对于Windows,请先阅读intro(3)(我不知道),也许通过启动WinAPI

在Linux上,与目录相关的API包括heremkdir(2)chdir(2)rmdir(2)getcwd(2)stat(2)和{{ 1}},opendir(3)readdir(3)等,等等。请注意,Linux上的文件只有nftw(3)(读i-node以及大约{{3 }}),并且可以位于几个目录中(或不包含),请参见inode(7)。 AFAIU,这与Windows产生了很大的差异。

PS。我从未使用过Windows,也从未为此编写代码。