百度空间 | 百度首页 
 
查看文章
 
[Windows 文件系统]U..\ 无法正常访问的真正原因
2007年03月13日 星期二 21:52

  似乎是大二或者大一吧,UMU 发现了 md U..\ 建立出来的 U. 文件夹无法访问,当时在几个论坛说了这个现象,后来发现有人和 UMU 一样发现了。UMU 不知道他是不是比 UMU 先发现,但可以肯定的是他的解释是错的!

  大部分人认为无法访问的原因是文件夹的名字其实是 U..\,关键在于 \ 这个字符。其实这不对,关键是在于 . 是文件基名和后缀名的分隔符号。

  首先,要肯定的是,用 md U..\ 建立出来的文件夹就是 U.,而不是 U..\,也不是 U..。有人说原因是:真正的文件夹是 U..,却被当成 U.,访问时,查找了不存在的 U.,所以提示错误,这样的解释也是错的!

  为什么 md U..\ 建立出来的文件夹会是 U.?让我们先做个试验,您建立一个文件,然后把后缀删除,比如说“UMU.”,这样就是没有后缀,但是有一个“点”,结果按了回车先被警告一下,后来发现文件被保存为“UMU”,而不是“UMU.”。那么这个 \ 起了什么作用?我们建立文件夹时,输入 md UMUmd UMU\ 效果是完全一样的。但在这里就不一样,因为如果文件夹名不用 \ 结尾,那么所有后面的“点”都会被过滤掉,加了 \ 告诉系统不要把 . 弄没,文件名就是 U..,不要鸡婆把它弄成 U 了!继续看,U.. 是什么意思?它的 BaseName 是 U.,然后是一个分隔符号 .,没有后缀。系统就保存了它的 BaseName,然后记录这家伙没后缀,所以分隔符号 . 没了,就像之前那个没后缀的文件 UMU. 一样!

  我们再做个试验,UMU 将提供更多的证据!在命令行下,切换到 D:,输入:md "\\?\D:\U.",然后我们去 D: 看到一个叫 U. 的文件夹,一样是打不开,事实上这样建立和 md U..\ 完全一样!不信大家可以用 rd U..\ 去删除 md "\\?\D:\U." 建出来的文件夹,或者用 rd "\\?\D:\U." 去删除 md U..\ 建出来的文件夹。结论是他们一模一样!

  访问的时候发生了什么?我们在资源管理器里双击 U. 文件夹,结果在传递文件夹名字的时候是 D:\U.,这时候下层 API 又做了一次过滤,把“点”当分隔符号又给去掉了,结果等于访问了 D:\U。同理,访问 D:\U.. 等于访问了 D:\U.

  完整说一遍:在建立文件夹的时候,因为不知道结尾的“点”是什么意思,所以被当做是“分隔符号”过滤掉(D:\U..\ 变成 D:\U.),读出来的时候因为下层 API 知道这个“点”是文件名的一部分,就没再去掉,上层应用得到了一个以“点”结尾的名字,然后它就老老实实地显示出来(D:\U.),需要进入这个文件夹的时候,又用下层 API 来检查这个文件夹存在与否,然后传过去的名字是 D:\U.,结果又不知道结尾的“点”是什么意思,再次被当做“分隔符号”过滤掉(D:\U. 变成 D:\U),结果等于是判断 D:\U 存在与否,如果存在,则进入的其实是 D:\U

  结论:鸡婆就是一种罪!


类别:编程之路 | 添加到搜藏 | 分享到i贴吧 | 浏览() | 评论 (16)
 
最近读者:
 
网友评论:
1
2007年03月13日 星期二 22:05 | 回复
了解了.后缀分隔符的问题.谢谢UMU.深入了解了.上次也想过后缀.就是没有这么清晰.
 
2
2007年03月14日 星期三 08:30 | 回复
抓狂。。。
 
3
2007年03月15日 星期四 18:02 | 回复
第一次知道这样的文件夹,已经是上年7月的事了…… 深究原来是这样啊~ 另外还有一种隐藏文件夹方法:虚拟文件夹。
 
5
2007年03月16日 星期五 18:43 | 回复
偶回来了~~小U.......
 
6
2007年03月21日 星期三 20:23 | 回复
呵呵,高人就是不一样,我懂了
 
7
2007年03月23日 星期五 10:41 | 回复
本文没有说 到底咋个把他删掉呢?
 
8
2007年03月23日 星期五 11:38 | 回复
有啊,说了,用 rd 命令
 
9
2007年03月23日 星期五 11:58 | 回复
OK.
 
10
2007年03月23日 星期五 21:57 | 回复
删什么删,我把他保留了,还每个盘都保留了一个......
 
11
2007年07月12日 星期四 10:17 | 回复
上次上你的档D盘下一直留一个,真是的,又回来找,幸亏你没删除这个文章啊
 
12
2007年10月11日 星期四 14:30 | 回复
我执行 copy 1.txt U..\1.txt 后 用 rd U..\ 或 del .\U..\1.txt都不能删除 但是 type U..\1.txt可以正确执行。
 
13
2007年10月11日 星期四 14:31 | 回复
U..\下面有文件(不是空目录)该如何删除呀?
 
14
2007年10月11日 星期四 15:58 | 回复
RD /?
 
15
2007年10月11日 星期四 16:27 | 回复
rd /S /Q U..\
 
16
2008年03月27日 星期四 16:18 | 回复
文件夹有后缀吗?
 
17
2008年03月27日 星期四 17:15 | 回复
没有,但名字里可以有 .
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu