一则历史:为什么网络路径前加一个盘符还能正常工作

news/2024/12/5 11:58:51/

有一个比较知名的奇异特性:文件系统在解析 UNC(Universal Naming Convention) 路径时,会故意忽略掉最前面添加的盘符字母。
举个例子,假设服务器上有一个共享文件夹,其路径为:\\server\share\directory,如果你在命令提示符下输入下面的命令:
dir P:\\server\share\directory

初看下来,这条指令应该不会执行成功,因为最前面的盘符字母 P 并不存在。但是,结果是这条指令会正常工作,它会忽略掉前面的盘符字母。

为什么会这样设计?

让我们将钟表拨回到 1984 年,那个时候,MS-DOS 3.1 即将发布,此版本增加了对网络的支持。在此之前,一个完整的文件名由三个部分组成:驱动器号、路径和文件名。许多程序代码都依赖于这个规范,并额外做了一些事情:如果用户忘记输入了驱动器号,则它们会”好意地”在前面加上一个驱动器号。

例如,如果你告诉程序,将计算结果保存到服务器上的一个共享文件夹 \\server\share\file.txt, 程序会暗自嘀咕: “哦,亲爱的,这可不好,用户忘记了输入驱动器号!我会把当前的驱动器放在前面,让事情变得更好,”。
结果,它得到了这样一个路径:C:\\server\share\file.txt。而其他程序会提示你:”请输入驱动器号”,而你不能”不,我是想将文件保存到网络上的一个位置,它根本就没有驱动器号,你只需要用我提供的路径就可以了”。
最终,这些程序无论如何都坚持让用户输入一个驱动器号,用户不得不给他们一个。

(相比那些”有用地”将 //server/volume/file 重写为 /server/volume/file 的 Unix 程序,因为它们“知道”连续斜杠会折叠,不知道两个前导斜杠的特殊例外。)

为了保持与提供这种”不需要的帮助”的程序的兼容性,MS-DOS 中网络支持的设计者决定允许奇怪的文件路径,例如上面所说的 C:\\server\share\directory,并忽略最前面的驱动器号。直到今天最新的 Windows 11 操作系统,这个路径解析怪癖仍然存在。

总结

为了保持对现有应用程序的兼容性,Microsoft 的工程师确实下了些功夫。
但历史包袱越来越重,总有一天会扛不动。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why is a drive letter permitted in front of UNC paths (sometimes)?》

 


http://www.ppmy.cn/news/87422.html

相关文章

android 12.0 设置app为默认浏览器

1.概述 在12.0的产品定制化中,如果系统安装多个浏览器时,需要设置默认浏览器来完成需求,这就需要看系统设置中的相关源码 当出现多个浏览器时,该如何设置默认浏览器呢, 其实在Settings 默认应用->浏览器应用 当点击选择浏览器时会调用 /package/app/PermissionControll…

基于html+css的图片展示93

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

node.js+vue房屋租赁管理系统z0g8w

本系统主要包括以下功能模块:租户、出租人、房源信息、预约看房、合同信息等模块。 其中设计的主要功能如下: (1)用户的注册和登录本系统,登录到系统的首页。 (2)用户可以发布自己的房源信息…

C++的指针和引用

文章目录 C的指针和引用C指针C中内存单元内容和地址指针的定义和间接访问操作指针和数组左值和右值 几种C中的原始指针原始指针的基本运算 存储区域划分栈和队列代码在内存单元中的分布cpp动态分配资源和回收原则资源管理方案-RAIIC中几种变量对比 内存泄漏智能指针C的智能指针…

【Nginx】- 02 Nginx反向代理、负载均衡、动静分离、虚拟域名配置

Nginx反向代理、负载均衡、动静分离、虚拟域名配置 1 反向代理1.1 nginx配置 2 负载均衡2.1 ngxin配置2.2 nginx负载均衡策略2.2.1 默认轮询2.2.2 权重2.2.3 iphash2.2.4 least_conn 3 动静分离3.1 打包前端项目3.2 部署前端项目3.3 配置静态图片资源访问 4 虚拟域名配置4.1 修…

RLHF中的PPO算法原理及其实现

RLHF中的PPO算法原理及其实现 ChatGPT是基于InstructGPT实现的多轮对话生成式大模型。ChatGPT主要涉及到的技术包括: 指令微调(Instruction-tuning);因果推断(Causal Language Modeling);人类…

一图看懂 click 模块:一个通过组合的方式来创建精美命令行界面的包,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 click 模块:一个通过组合的方式来创建精美命令行界面的包,资料整理笔记(大全) 🧊摘要🧊模块图&#…

单片机--中断实验练习

【1】按键中断实验(外部中断)--EXTI: STM32上电LED(PB0)灯亮 ,当检测到按键(PA8)按下时处理中断事件,变量i 扩展:知识点 响应优先级->在两个中断同时触…