因为一个文件夹名字,电脑死机了

269 天前
 bjzhou1990

死机重启以后给我弹这个,第一次遇到

5404 次点击
所在节点    Windows
33 条回复
geelaw
268 天前
@XiLingHost #3 Program 的 8.3 文件名是 PROGRAM ,会出问题是因为很多 Windows 软件没有正确处理空格,在调用 API 的时候把命令行设置为

C:\Program Files\abc\def.exe xyz

按照正统理解,这是在打开 C:\Program 并传入参数 Files\abc\def.exe 和 xyz ,但是现实世界里意思大概是打开 C:\Program Files\abc\def.exe 并传入参数 xyz 。

为了兼容这种情况,Windows 会尝试修复首个命令没有被 " 包围的命令行,方法是从左到右尝试寻找最短的以空白分开的串,满足这个串代表的路径存在着文件,然后把需要打开的文件理解为这个串,剩下的理解为传入的参数。

读者习题:以上面的坏例子,解释为什么存在着 C:\Program 文件可能会让一些程序坏掉。

此处应该记住的是永远要正确转义命令行,文件名可以包含空格。
geelaw
268 天前
@Ocean810975 #18 应该也不是很早期,因为 8.3 格式的名字里不能有空格。

@ulosggs #20 这个理解比较片面。首先,分区的文件系统可以选择不支持短文件名,也可以通过注册表关闭短文件名的生成。如果一个名字已经符合 8.3 的要求,就只会转换为大写作为短文件名。另外短文件名和创建顺序有关,第一个以 PROGRA 开头的无扩展名长文件名在 Windows 的常见实现里会得到 PROGRA~1 这个短文件名,第二个则是 PROGRA~2 ,更更多的情况还有更复杂的命名方法( Windows 上的常见实现大概会有四位 hex 之类的),还有在短文件名已经生成后建立长文件名等于已经存在的短文件名的情况。PROGRA~1 只能表示某个特定的文件,不能表示所有以 Progra 开头的长文件名文件。

最后,使用 PROGRA~1 表示 Program Files 的程序不应该被理解为“不想处理空格”,这实在是太美化它们了,更好的理解是

自从 Windows 3.3 以来就没更新过的程序,或者
写得很糟糕的程序,或者
忘了声明自己是 Windows 95 之后开发的程序

在现代文件系统里存储短文件名只是为了兼容上个世纪的程序,不是允许新程序逃避现实。
lostberryzz
268 天前
难道你没发现 C:\Program Files 是复数形式么,就是要建,也是 C:\Programs 啊
vvhy
268 天前
woc ,我用了 C:\Programs
datou
268 天前
dos fat 时代的 8.3 遗祸吧?

到现在微软都要抛弃 ntfs 了都还没解决掉?
Jirajine
268 天前
@geelaw #21 Windows 为什么要兼容这种这种情况?没有正确处理空格的程序,在开发人员的设备上就应该直接出错。这种自作聪明的“尝试修复”是非常糟糕的做法。
geelaw
268 天前
@Jirajine #28 很明显是为了避免《微软公司升级系统故意让某公司软件不能运行,我们要抵制微软、反垄断》这类文章。有些开发者的电脑上路径没有空格,且很多开发者有自己机器上测试的坏习惯——正确的测试方法是在一台全新安装的 Windows 机器上测试(可以检查出很多“只有开发环境下才能运行”的 bug )。

另外,Windows NT 4.0 的时候用户资料默认位置是 C:\WINNT\Profiles\用户名,而 Windows XP 里面默认位置是 C:\Documents and Settings\用户名,所以即使一开始在全新安装的 Windows 上测试过程序也不代表就会在以后的默认安装上成功——当然那个程序已开始没处理过空格就是错的。

我也不喜欢这种设计,因为某些程序自始至终就不是正确的,但这类程序就是很多,从 DOS 和 Unix 来的程序经常这样。

扩展阅读:搜索 8.3 names site:devblogs.microsoft.com/oldnewthing 以及把 8.3 改成 short 搜索。
resu
268 天前
C 盘 D 盘常年驻扎自建的 Programs 从无故障
abc0123xyz
268 天前
我用
c:\an_de_cheng_xu
janus77
268 天前
我是 apps 、myApps 、bigApps 这样命名的
YCCD
268 天前
C:\ProgramFiles
没出过问题,很方便,
安装其他软件时把默认路径“C:\Program Files”的空格删了就行了
usedTo404
268 天前
@webcape233 我用 C:\App\
yulgang
268 天前
我很久以前也遇到过一次这个提示,忘记怎么处理的了,你试试
chkdsk /x /f c:
然后重启直到检查完 C 盘进入登录界面看看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX