一、Microsoft Windows
Windows系统中以反斜线’\‘表示文件路径,而在编程语言中反斜线'\'通常为转义字符。所以在Windows环境下的程序中,如涉及到文件路径一般需要写成如下形式:
"D:\\Microsoft Visual Studio 2010 Workspace\\MFCardReader\\"
其中第一个反斜线为转义符,第二个反斜线表示文件路径。如果只有一个反斜线,编译器将会把反斜线当做转义字符来处理,在这里最后有反斜线应该是编译不通过的,编译通过了和我们想要的结果也谬以千里了。
值得注意的是,在Microsoft dos(cmd)环境下的dos命令在处理文件路径时也以反斜线'\'表示文件路径,如果非要写成斜线'/'也不是不可以,不过得这样写:
del "D:/Virtual Machines/Fedora 20/filename" /*删除filename文件*/
用反斜线的话是不需要带双引号的,带上也没错。
del D:\Virtual Machines\Fedora 20\filename or del "D:\Virtual Machines\Fedora 20\filename"
二、Linux/Unix环境下
文件路径已斜线’/‘表示,且文件系统已根目录’/‘开始,似乎要好理解得多,至少在编程语言中不会和转义符冲突。
Linux/Unix环境下的shell命令自然也以斜线’/‘表示路径。
三、编程应用
①编译器在处理字符串时遇到反斜线’\‘会当成转义符来识别;
所以在Microsoft Windows环境下处理文件路径时需要特别小心,其他地方是很少用到'\'的,如果是斜线,则不需要转义。
②编译器在处理非字符串时遇到反斜线’\‘会当成续行符来处理;
③在SQL中的反斜线’\‘同样会被当作转义符;
#define FILE_PATH "D:\\file path\\"
char sql[1024] = {0};
sprintf_s(sql, sizeof(sql), "insert into table values ('%s')", FILE_PATH);
这段代码中我们得到的SQL语句是: insert into table values ('D:\file path\') ----编译器将反斜线'\'当做转义符且不论table的结构如何,首先这条SQL是错误的,因为单引号’’‘也被反斜线转义了,导致SQL出错。
这里的过程是这样的:
第一步,C的编译器编译C程序,将文件路径组成SQL(两条反斜线变成了一条);
第二步,SQL(Structure Query Language)也是一种编程语言,它的编译器将SQL语句看成是这样的:insert into table values ('D:file path\')
也就是说,最后那个单引号被看成了字符串的一部分,而不是字符串的结束标志,SQL的编译器认为字符串还没有结束,SQL肯定是无法执行的。
当然,这样的坑只有在Microsoft Windows下才能碰到,在大部分Windows环境编译器都能够识别以‘/’作为文件路径的情况下,最好还是写成这样D:/file path/
编译器就不会产生误会了。在用dos命令时写成这样既可:del "D:/file path/filename"
如有转载请注明出处
作者:super bert@csdn