zoukankan      html  css  js  c++  java
  • window linux 路径写法(转载)

    转载canchew的专栏的博客内容

    Windows路径是我们经常使用的东西,它看似简单,实际上隐含许多细节,这些都是在平常的使用过程中注意不到的。下面让我们来看看各种各样的Windows路径。 

    提起路径,我们都会想到“绝对路径”和“相对路径”,实际上绝对路径是一个广泛的概念,它表示的是可以唯一定位一个文件或文件夹的路径,有多种形式的路径都属于绝对路径的范畴,例如: 
    完整路径(Full path)

    我们平时所说的“绝对路径”通常就是指完整路径,它的格式如下:
    C:WindowsSystem32calc.exe 
    UNC(Universal Naming Convention通用命名规范)路径

    UNC路径用于在局域网上定位文件或文件夹,在通过网上邻居访问其它系统上的共享文件时使用的就是UNC路径。UNC路径的格式如下:
    \PC101ShareFilesjob.doc
    其中PC101是目标系统的计算机名,ShareFiles是目标系统上的共享文件夹名称。 
    以\?开头的路径

    在某些手工辅助杀毒的工具中可以看到以\?开头的路径,这种路径我还找不到正式的名称。完整路径和UNC路径都可以以\?开头:
    \?C:WindowsSystem32calc.exe
    \?UNCPC101ShareFilesjob.doc 
    相对路径(Relative path)

    上面四种路径都可以在本地或网络上绝对定位一个文件,因此属于绝对路径。另一种我们常常使用的是相对路径,这种路径需要与进程的当前文件夹(Current directory)一起合作才可以定位一个文件或文件夹。进程的当前文件夹并不是指EXE文件所在的文件夹,它是每个进程都有的一个属性。例如在命令提示符中显示的路径就是这个cmd.exe进程的当前文件夹,使用cd命令可以改变当前文件夹,无论当前文件夹如何改变,cmd.exe文件所在的文件夹总是不变的。在进程启动的时候可以指定它的当前文件夹,例如在快捷方式的属性中有一个“起始位置”输入框,这个就是进程启动后的当前文件夹。如果在启动时不指定进程的当前文件夹(直接双击EXE文件的情况),那么EXE文件的所在文件夹就会作为它的当前文件夹。 

    纯粹的相对路径格式如下: 

    WindowsSystem32calc.exe
    要注意的是相对路径的开头不能有,很多人以为有没有都是一样的,其实不然,以开头的路径是另外一种路径,下文会详细介绍这种路径。 

    如果在进程中操作文件时传递一个相对路径,那么进程会将当前文件夹的路径与这个相对路径合并,得到一个完整路径。例如命令提示符的当前文件夹是C:Windows,如果执行start System32calc.exe命令,程序就会将两个路径合并得到C:WindowsSystem32calc.exe。
    由于这样的特性,当前文件夹又称为工作文件夹,因为进程使用相对路径时都是针对该文件夹的。 

    除了上面所说的纯粹的相对路径,还有两种特殊的相对路径,为了不至于混淆,不再将它们称为相对路径。 
    以开头的路径

    上面说过相对路径不能以开头,一旦如此,它就表示相对于当前文件夹根目录的路径。例如进程的当前文件夹是C:Windows,那么System32calc.exe就表示C:System32calc.exe。不论当前文件夹的路径有多深,只取根目录进行合并。可以在命令提示符中进行验证:首先将C:Windows设置为当前文件夹,然后执行start System32calc.exe命令,将会提示错误,所找不到文件。再执行start WindowsSystem32calc.exe命令,这时计算器程序成功启动了,证明了上面的说法。 
    以盘符和冒号开头的路径

    这种路径就像是拼写错误的完整路径,它的格式如下:
    C:System32calc.exe 

    盘符加冒号是一种特殊的表示法,表示的是进程在“该分区上的当前文件夹”。这里又蹦出来了一个当前文件夹,这与上文的当前文件夹是不同的。简单来说,对于每一个分区,进程都会保存在这个分区上最后使用的当前文件夹。可能解析的不够好,那么可以使用命令提示符来操作一遍以加深理解。 

    运行cmd,执行cd /d C:WindowsSystem32命令进入该文件夹,然后切换到其它的分区,再执行C:calc.exe命令,可以看到计算器程序启动了。 

    我们在执行cd命令进入C:WindowsSystem32文件夹后,进程便以此为当前文件夹,当切换到其余的分区时,进程先将这个文件夹的路径保存起来,再进行切换。使用盘符和冒号的形式读取指定分区上的当前文件夹。 
    路径中的限制

    除了路径格式上的限制,还有很多字符上的限制,下面一一来看看各种路径有什么限制。 

    除了以\?开头的路径之外,其它路径的长度都不能超过260个字符(包括结尾的字符),而\?开头的路径长度可以达到约32000个字符(系统在处理\?前缀的时候可能将它扩展成更长的字符串)。网络上流传的一则技巧:文件路径太长而不能被删除,可以在执行del命令时在路径前加上\?前缀。 

    文件或文件夹名称的最后一个字符不能为空格或句点。但在路径中,最后一个字符可以为句点,因为路径中的句点表示的是当期文件夹(这与上文的当前文件夹完全不同),两个句点表示的是上一级文件夹。以\?开头的路径中不能使用句点表示当前文件夹或上一级文件夹,在资源管理器的地址栏中虽然可以这么做,那是因为资源管理器对其作了处理。 

    文件或文件夹名称不能包含的字符 :
    < > : " / | ? *
    在路径中可以使用 : ?,冒号是与盘符一起使用的,问号是\?前缀中特有的,除此之外不能出现这两个字符;而是文件夹分割符。虽然我们也能使用/作为分隔符,实际上这是不允许的,系统在处理路径时会将/替换成。另外,如果路径最后一个字符是,那么该路径表示的是文件夹;否则表示的是一个文件。 

    UNC路径的计算机名部分不能出现以下字符:
    ` ~ ! @ # $ % ^ & * ( ) = + _ [ ] { } | ; : . ‘ “ , < > / ?
    确实是够多的了,实际上标准的计算机名推荐只使用26个英文字母、10个数字以及-(连字符),否则可能会出现找不到计算机的情况。在更改计算机名的时候如果出现非标准字符,系统会作出提示。

     

    在Unix/Linux和windows中文件路径的表示方法是不一样的,在Unix/Linux中,路径的分隔采用正斜杠"/",比如"/home/fzu";而在Windows中,路径分隔采用反斜杠"",比如"D: oolseclipse"。

    此外,由于编译器的字符串解析中还涉及到转义字符的问题,经常会出现莫名其妙的错误,所以为了避免这样不必要的麻烦,windows下的路径经常会用双反斜杠来表示,不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是"",因此写成"D:\tools\eclipse"是不会出问题的。


     linux相对路径的表示:
    . 表示用户所处的当前目录;
    .. 表示上级目录;
    _ 表示前一个工作目录;
    ~ 表示当前用户自己的根目录;

    ~account 表示[account]这个用户的根目录。

  • 相关阅读:
    CF1202F You Are Given Some Letters...
    CF1178E Archaeology
    PTA (Advanced Level) 1005 Spell It Right
    PTA (Advanced Level) 1004 Counting Leaves
    Qt5——从零开始的Hello World教程(Qt Creator)
    PTA (Advanced Level) 1003 Emergency
    PTA (Advanced Level) 1002 A+B for Polynomials
    HDU 1272 小希的迷宫
    FZU 2150 Fire Game
    HihoCoder
  • 原文地址:https://www.cnblogs.com/kendn/p/8342587.html
Copyright © 2011-2022 走看看