Mac/Windows系统中 C++获取路径的方法(混乱的正反斜杠)

Windows系统

windows系统文件分隔符是:“ \ "

路径获取方法:右键 → 属性 → 得到文件路径

获取到的文件路径是这样的:C:\hello\file.txt (相对路径)

C++中,\\表示的是一个转义字符,他表示 \ ,

所以在Windows系统下用C++来获取文件路径的方法有两种:

CString filename=Path("C:\\hello\\file.txt ");(注意这里要把斜杠都转为双斜杆)

CStringfilename=Path("C:/hello/file.txt"); 

转义字符

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如换行(\n),回车(\r),等,就称为转义字符。

通俗讲:输出字符串时,如果想输出一个换行,那就要加上'\n'这个标志,类似的,输出一个TAB,就加上'\t',也就是说,反斜杠("\")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号('"'),就需要输入'\"',这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲'\\'就可以了。 

由此,如果"C:\\hello\file.txt"这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠"\",甚至紧跟在反斜杠后面的' f '字母也一起被转义成了其它的字符,因此在C语言中获取路径需要将系统文件分隔符手动改为双斜杠 \\  

常见转义字符:

\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\v 垂直制表(VT) 011
\r 回车(CR) 013
\t 水平制表(HT) 009
\\ 反斜杠 092
\? 问号字符 063
\' 单引号字符 039

字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"\\"分隔路径的形式。不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是"\",从而避免了错误的发生。

 


Mac 、Linux、Unix系统

mac/linux/unix系统到文件分隔符是:“ / ”

获取文件路径到方法:command+空格 →  输入ter → 将文件拖入到终端中 → 自动显示路径

获取到的文件路径是这样的:/Users/dong/Desktop/smarthome/Taylor

在Mac系统下用C++来获取文件路径的方法:

CString filename=Path("/Users/dong/Desktop/smarthome/Taylor");

相对于Windows而言,Mac/Linux系统显得完整周到的许多,用正斜杠" \ "作为路径分割的方法,若文件名中包含空格,可以直接在空格前加上反斜杠" \ "进行转义,从而很好的和命令参数区别出来(因为参数之间一般使用空格分隔)

Unix系统下:

进入hutaow yuan目录(注意有空格)

cd hutaow\ yuan (需要输入\来对空格进行转义)

你可能感兴趣的:(QT)