基础知识
正斜杠,又称左斜杠,符号是"/"。反斜杠,也称右斜杠,符号是""。
记忆方法:关于这两个的辨别记忆,可以想一想乒乓球的正手与反手打发。
补充一个图更容易记住哪个是斜杠,哪个是反斜杠。
使用说明
windows系统:
反斜杠““用来表示目录;正斜杠“/”用来表示网址、Url地址。
“/”是表示参数,“”是表示本地路径。
DOS路径:
C:WINDOWSSETTING ..这是反斜杠的作用后面跟着的是文件名
C:dir /P ..这就是正斜杠后面是一个命令的参数,dir 是命令。
unix系统:
正斜杠“/”表示目录。由于web遵循unix命名,所以在网址(URL)中,正斜杠“/”表示目录。
“/”表示路径,“”表示转义,“-”和“--”表示参数。
反斜线符号“ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后一个换行字符立即出现,转义字符使行得以继续,遇到命令很长时使用反斜线很有效;反斜线从输入流中被移除并有效地忽略。
例一: ubuntu@ubuntu:~$ echo $HOME
/home/ubuntu
ubuntu@ubuntu:~$ echo $HOME
$HOME
例子中,反斜线去除了“ $ ”字符的特殊意义,保留字面值,从而不输出home目录路径。
例二:
ubuntu@ubuntu:~$ mv test.c
> ../Downloads/
例子中,反斜线使行得以继续,命令可以正常输入。
例三:
到这里就明白了怎么查看文件名为“ ”的文档了,只要输入命令
ubuntu@ubuntu:~$ vi \
就可以了,前一个反斜线保留了后一个反斜线的字面意思,即作为文件名输入了。
记忆方法:注意window这个单词的第一笔,也就是字母w的第一笔,是什么?没错,就是反斜杠,这样每次在想windows文件路径中用/还是的时候,首先要想 到windows的第一笔是什么,答案自然就出来了。作为windows的对立面,linux或unix文件路径中用的自然就是/ 了。
编码注意
C++转义字符
在获取文件路径的时候 很多人喜欢用 "d: est.txt",然后就会发生所谓的转义字符错误了。原因就是因为在此处“ est”中的“ “转化为了TAB。从而导致打开文件失败。
在代码中,fp = fopen("D:\D\Dtest.log","r+");
fp = fopen("D:/D\Dtest.log", "r+");
fp = fopen("D:D\Dtest.log", "r+");
效果相同,都可以打开文件。
在cmd.exe中,如下:
但是,看到这我有两个疑问:
- fp = fopen("D:D\Dtest.log", "r+");
D:后面不带路径符号也可以吗?为什么?
- 在CMD中,执行type D:D est.log,
此处的“D:D est.log”是不是作为参数传入的?其中的“ est”处的 ,为什么不是作为转义字符传入,为什么仍然能打开文件?
相关知识
相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
从C:log文件夹进入C:Userszhang-xch文件夹,需要输入cd ../Userszhang-xch
注意:相对路径的文件夹符号是斜杠:/
绝对路径:在www中(广域网),以http开头的链接都是绝对路径。
物理路径:物理路径指的是某一台计算机本地的路径,以盘符开头,例如C:、D: emp等等
历史问题
Windows 用反斜杠(“”)的历史来自 DOS,而 DOS 的另一个传统是用斜杠(“/”)表示命令行参数,比如:
cd %SystemDrive%
dir /s /b shell32.dll
既然 DOS 这边斜杠被占用了,只好找一个最接近的。那就是它了。而在 UNIX 环境中,我们用减号(“-”)和双减号(“--”)表示命令行参数。
用斜杠表示命令行参数是兼容性原因。这个问题最初起源自 IBM。IBM 在最初加入 DOS 开发时贡献了大批工具,它们都是用斜杠处理命令行参数的。而这个传统源自于 DEC/IBM,比如当年的 VMS 就是用斜杠处理命令行参数,它的目录分隔符是美元符(“$”)。顺便说一句,这个传统也被部分地继承进了 DOS 和 Windows 体系,日文版的 Windows 就把反斜杠在屏幕上显示为“¥”,虽然实际上还是反斜杠。
如今的 Windows 内核在处理路径时确实可以同时支持斜杠和反斜杠。很多时候我们看到用斜杠时出错,是因为应用程序层面的原因。比如 cmd.exe 就不支持用斜杠表示路径,而PowerShell.exe 支持,也正因为这个原因,PowerShell 开始转而使用减号作为命令行参数的起始符。
由此也可以看出Windows或者说DOS在设计初期考虑不够 周全,为了和Unix一些特征区别开来,将Unix中的正斜杠"/"分隔路径方式改变成了反斜杠""。这样改变导致的一个问题就是在早期DOS命令行 中,正常的文件名是不能包含空格的,如果包含了空格,会导致输入这样的文件名时,命令解析无法将其和参数区分开。例如,想要进入"hutaow yuan"这个目录(在此先忽略8.3命名规则),直接输入"cd hutaow yuan",命令行会将其解析为进入"hutaow"目录,而后面的"yuan"做参数,这显然不是所期望的。【目前在cmd中,将带空格的文件名称做了如下处理】
而在Unix中,文件名如果包含空格,可以直接在空格前加上反 斜杠""进行转义,从而很好的和命令参数区别出来(参数之间一般使用空格分隔)。还是上面的例子,在Unix中,只要输入"cd hutaow yuan"(在yuan前面的空格前加上""),命令行会正确的辨认出"hutaow yuan"并进入这个目录。
当然,现在Windows的后续版本已经使用其它方法(比如文件名用双引号括住)解决了空格问题。