一、前言
程序本质上就是在操作数据,而文件便是数据的一个长久性载体,所以就需要操作文件。
但操作文件首先需要知道的是文件的位置,也就是文件路径,而目前表示文件路径一般就两种方式:绝对路径、相对路径。
二、绝对路径
绝对路径很好理解,就是从头到尾任何一个字符都不能省略。
比如下面几个文件路径:
"D:\Program\clear.exe"
"D:\Desktop\other\command.txt"
"C:\appverifUI.dll"
这些文件路径写的非常清楚,比如第一个路径意思就是:D
盘下的Program
文件夹下的clear.exe
文件。
其它路径也是同理,这种将路径完全写死的方式,就被称为绝对路径,因为它不能有任何变化。
但也正应其太过绝对,所以其实用的地方并不多,至少对于应用开发而言是这样。
三、相对路径
相比于绝对路径,相对路径就灵活的多了,从名字就能看出来,它的路径是相对的。
比如上面的绝对路径就可以改为相对路径:
".\clear.exe"
".\other\command.txt"
"appverifUI.dll"
此时可以看到,我们只写了后面一小部分的路径内容,更多的可能就想第三个那样,只写了一个文件名。
像这种只写路径后半部分的写法,就称为相对路径,因为此时他们的路径前面内容就属于未知的,未知就是不定的,不定就意味着可以根据情况变化。
还是拿第一个举例子,前面的.
代表的是当前路径,也就是说谁使用这个路径,那么这个.
就代表谁的路径。
比如我有一个应用程序放在:D:\test.exe
那么当我在这个test.exe
文件中使用这个路径.\clear.exe
时,前面的.
就会自动转换为test.exe
所在的路径,也就是D:
,结合起来就是D:\clear.exe
。
如果test.exe
放在其它地方,这个.
也会跟着变化,这便是相对的意思。
对于前面第三种写法,也就是直接写名字的:"appverifUI.dll"
这种也是相对路径的简写方式,相当于省略了前面的.\
,效果是一样的。
相对路径用的地方是极多的,比如应用程序的数据文件,一般自然是要跟着应用程序走,也就是应用程序无论被安装到哪个路径下,通过相对路径,我们都能保证我们程序中读写的文件都是在本应用程序安装目录下的。
四、路径规范
windows系统的路径分隔符为\
,但只要你稍微了解任意一门编程语言都会发现,\
符号在编程语言中一般都被用作了转义符,比如C/C++中的\n
,就是将字母n
转译为换行。
所以在编程语言中使用\
并不是很方便,大多数时候你得写两个\
代表一个\
,也就是常能看到的写法:"D:\\Program\\clear.exe"
。
但这仅仅只是windows系统的规范,在linux系统中使用的是/
作为路径分隔符,就没有这种顾虑了,比如路径/home/yu
,就可以直接在代码中写。
事实上windows系统似乎也认识到了它这种方式的局限、有些时候在windows系统中其实使用/
也是可以的:
大部分编程语言、包括C/C++,基本也可以这样写:"D:/Program/clear.exe"
。
反正总得来说,能用/
最好就用,毕竟它不会和编程语言中的转义符冲突,用起来要舒服的多。
五、特殊路径
前面提到了.
这个特殊符号,它代表了当前路径:
所以cd .
命令意思就是进入当前路径,路径也就没有变化了。
它在windows、linux系统上都是通用的,一般用于相对路径的表示,让人一看就知道这是在用相对路径。
而另一个通用的特殊符号是..
,它同样被用于相对路径,但区别在于它表示的是上一级目录:
这两个特殊路径符号在编程中用到的地方是非常多的,要熟练记住和使用。
六、网络路径
你稍微仔细观察就会发现,网站的页面看上去似乎也是一个路径呀:https://www.kucoding.com/article/62.html
是的,这其实和我们的D盘、C盘下的文件是一样的,前面的https://
代表这个网站使用的协议,这里用的https
协议。
然后后面的www.kucoding.com
是本网站的域名,这个需要自己去域名提供商手中买。
至于最后面的/article/62.html
,对于静态网站来说,一般就是其服务器电脑上的一个叫做article
文件夹下的62.html
文件。
用的也是相对路径,无论你的域名是是什么,只要将这个文件夹作为网站的根目录,那么都可以通过:https://域名/article/62.html
来访问这个页面。
当然,这仅仅是针对静态站点,对于动态站点来说这是没有意义的,因为这些路径可以随意伪造,但即使如果,其逻辑其实和静态站点也差不多。