牛骨文教育服务平台(让学习变的简单)
博文笔记

Windows和Linux/Unix系统中文件路径使用总结

创建时间:2015-03-13 投稿人: 浏览次数:2534

一、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 MachinesFedora 20filename           or            del   "D:Virtual MachinesFedora 20filename"  


二、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

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。