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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

windows和linux下的文件路径表示相关推荐

  1. tftpd32服务器软件在Windows与linux 下的文件传输(服务器ip 的设置问题)

    tftpd32服务器软件在Windows与linux 下的文件传输 https://blog.csdn.net/stoic163/article/details/42804421 2015年01月17 ...

  2. tomcat项目在Linux下生成文件路径错误问题

    linux下路径保存错误 linux下保存错误,这是因为在windows上文件分隔符是"\",在linux上文件分割符是"/",所以所以往linux服务上部署时 ...

  3. windows和linux下读取文件乱码的终极解决办法!

    乱码是个很恶心的问题. windows和linux读取txt文件,一旦读取了,编码发生改变,就无法再还原了,只有重启项目. 网上有很多方法都是读取文件头,方法很好,但是亲测都不能用(右移8位判断0xf ...

  4. php linux下保存文件路径怎么写,详谈PHP文件目录基础操作

    我们知道,临时声明的变量是保存在内存中的,即便是静态变量,在脚本运行完毕后也会被释放掉,so,想长久保存一个变量的内容,方法之一就是写到文件中,放到硬盘或服务器上,为此文件操作就必须很熟悉. 1.文件 ...

  5. php linux下保存文件路径怎么写,linux下php导入带图片的word文档转为html,图片保存下来生成路径。...

    linux下yum install libreoffice yum install libreoffice-headless 如果出现异常,在页面上不一定表现出来,而是页面卡着一直没响应,通过apac ...

  6. java多级目录文件是否存在_Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)...

    兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...

  7. Windows与Linux之间海量文件的传输与Linux下大小写敏感问题

    Windows与Linux之间海量文件的传输与Linux下大小写敏感问题 mount.cifs 支持通过网络文件系统挂载,不过需要安装cifs-utils,也可通过mount -t cifs挂载,详细 ...

  8. linux运行input文件路径,new FileInputStream(filePath)方法在linux下执行不正确 | ZPY博客...

    因为要做下载,代码里用的new FileInputStream(filePath)读取文件在windows下测试正常,但打包放到Linux下执行就不正常了,也不报错,但是下载下来的图片是损坏的.感觉是 ...

  9. windows与Linux实时传输数据,I01 物理隔离条件下Windows与Linux服务器的文件传输脚本...

    title: I01 物理隔离条件下Windows与Linux服务器的文件传输脚本author: Adolph Leecategories: 进阶tags: paramiko打怪升级mathjax: ...

最新文章

  1. Python Django CBV下的通用视图函数
  2. 走近分形与混沌(part16)--三与自组织
  3. 盘点Win10系统的实用“小设计”
  4. Maven 打包war文件
  5. Y Combinator 创业课 2018 @北京
  6. hive2 mysql_架构hive2mysql流程
  7. Python多线程与Socket编程综合案例:素数
  8. 【Linux】七种文件类型
  9. Hadoop笔记整理(二):HDFS
  10. ELK6.0日志从收集到处理完整版教程(二)
  11. jsp相关概念以及九大内置对象
  12. QT自定义控件(电池)
  13. 自由软件之“父”—Richard. M. Stallman
  14. SQL sever2008 r2安装闪退的解决办法
  15. 电阻转换温度值c语言,PT1000电阻值转化为温度值的计算公式
  16. 免费可商用图片网站整理
  17. 列举五样计算机常见故障,项目五计算机常见故障和排除.ppt
  18. java 科学计数法位数_科学记数法android java
  19. uni-app实现微信相机
  20. JavaScript处理json数据(对象,数组,集合)

热门文章

  1. 关于ALTERA的FPGA的弱上拉问题
  2. python 正则表达式应用——缩写词扩充
  3. Delphi 控制摄像头
  4. 使用pthread和线程池实现B+树的并行块加载bulkload过程
  5. 大话西游维护完怎么刷服务器,大话西游2很实用:看高玩教你如何快速刷齐高端套装...
  6. linux7 ntp log,RH254小结(九)rhel7新的ntp对时服务Chrony
  7. 【数据结构与算法】之深入解析“最小高度树”的求解思路与算法示例
  8. DSP 28335中GPIO配置
  9. LINUX 基础命令和预处理
  10. 【Qt】数据库SQL接口层