bjzhou1990
V2EX  ›  Windows

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

  •  2
     
  •   bjzhou1990 · Aug 29, 2023 · 7175 views
    This topic created in 1161 days ago, the information mentioned may be changed or developed.

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

    33 replies  •  2023-08-30 13:03:22 +08:00
    kkk9
    kkk9
    Aug 29, 2023❤️2
    1
    Program File
    Program File (x86)

    系统盘下最好只存在这两个,其他的 Program 同名文件夹 容易导致意外发生
    SHF
    SHF
    Aug 29, 2023
    2
    这是什么历史遗留问题吗?
    KagurazakaNyaa
    KagurazakaNyaa
    Aug 29, 2023
    3
    @SHF 可能是会影响 8.3 文件名
    kkkbbb
    kkkbbb
    Aug 29, 2023
    4
    什么版本?
    bjzhou1990
    bjzhou1990
    OP
    Aug 29, 2023
    5
    @kkkbbb win11
    webcape233
    webcape233
    Aug 29, 2023 via iPhone
    6
    是的,所以我用 apps
    f14g
    f14g
    Aug 29, 2023 via Android
    7
    我都是用/Opt😂
    m0yBPjyX3475syS4
    m0yBPjyX3475syS4
    Aug 29, 2023❤️4
    8
    学 macOS ,创建 C:\Applications\
    a282810
    a282810
    Aug 29, 2023
    9
    我一台好久没有使用的 win10 老笔记本上次开机也提示这个,直接点"忽略"好像没什么问题
    vituralfuture
    vituralfuture
    Aug 29, 2023 via Android
    10
    不懂就问,为什么 Program 可能导致意外发生?
    cnbatch
    cnbatch
    Aug 29, 2023
    11
    折衷解决办法:使用英式英语 Programme

    只要别手贱把系统语言切换成德语或法语就没事,因为 Program Files 在德语会显示成 Programme ,在法语则是 Programmes 。然后可能会有软链接指向 Program Files 。

    切换成英式英语(国际英语)反而没事,因为英式英语的 Windows 照样沿用 Program Files ,不会变成 Programme Files

    可参考这份总结:
    https://www.samlogic.net/articles/program-files-folder-different-languages.htm
    darkengine
    darkengine
    Aug 29, 2023❤️1
    12
    @cnbatch 那为啥不改成 Chengxu ...
    est
    est
    Aug 29, 2023❤️1
    13
    @kkk9 fileS
    cnbatch
    cnbatch
    Aug 29, 2023
    14
    @darkengine 因为只需要在原文件名后方补字母就行,比较接近 OP 习惯——OP 主动使用的是“Program”而不是 Chengxu
    iseki
    iseki
    Aug 29, 2023 via Android
    15
    Windows 这不错啊,对这种东西还有提示
    lovelylain
    lovelylain
    Aug 29, 2023 via Android
    16
    我习惯用 Programs ,避免空格,按上面说的 8.3 文件这个也不会和 Program 冲突
    tyzandhr
    tyzandhr
    Aug 29, 2023 via Android
    17
    为什么不命名为中文 程序文件
    Ocean810975
    Ocean810975
    Aug 29, 2023 via Android❤️2
    18
    @vituralfuture
    这应该和早期 windows 系统的一个设计理念相关,与类 Unix 系统不同的,Windows 鼓励用户在文件名中使用空格。
    为了强制使开发人员适应这个特性,Windows 将程序运行关键的文件夹 program files 加上空格,
    qeqv
    qeqv
    Aug 30, 2023❤️1
    19
    @Ocean810975 不管什么系统,文件名里有空格我看着都很不舒服--
    ulosggs
    ulosggs
    Aug 30, 2023❤️6
    20
    都没说到重点。
    Windows 可以用 Progra~1 表示以 Progra 打头的文件夹,很多脚本为了避免使用空格会硬编码 Progra~1 代替 Program Files 。你现在建一个 Program 的文件夹,那些脚本全得挂掉。
    geelaw
    geelaw
    Aug 30, 2023 via iPhone❤️12
    21
    @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
    geelaw
    Aug 30, 2023 via iPhone
    22
    @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
    lostberryzz
    Aug 30, 2023
    23
    难道你没发现 C:\Program Files 是复数形式么,就是要建,也是 C:\Programs 啊
    vvhy
    vvhy
    Aug 30, 2023
    24
    woc ,我用了 C:\Programs
    datou
    datou
    Aug 30, 2023
    25
    dos fat 时代的 8.3 遗祸吧?

    到现在微软都要抛弃 ntfs 了都还没解决掉?
    Jirajine
    Jirajine
    Aug 30, 2023 via Android
    26
    @geelaw #21 Windows 为什么要兼容这种这种情况?没有正确处理空格的程序,在开发人员的设备上就应该直接出错。这种自作聪明的“尝试修复”是非常糟糕的做法。
    geelaw
    geelaw
    Aug 30, 2023 via iPhone❤️1
    27
    @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
    resu
    Aug 30, 2023
    28
    C 盘 D 盘常年驻扎自建的 Programs 从无故障
    abc0123xyz
    abc0123xyz
    Aug 30, 2023❤️1
    29
    我用
    c:\an_de_cheng_xu
    rb6221
    rb6221
    Aug 30, 2023
    30
    我是 apps 、myApps 、bigApps 这样命名的
    YCCD
    YCCD
    Aug 30, 2023
    31
    C:\ProgramFiles
    没出过问题,很方便,
    安装其他软件时把默认路径“C:\Program Files”的空格删了就行了
    usedTo404
    usedTo404
    Aug 30, 2023
    32
    @webcape233 我用 C:\App\
    yulgang
    yulgang
    Aug 30, 2023
    33
    我很久以前也遇到过一次这个提示,忘记怎么处理的了,你试试
    chkdsk /x /f c:
    然后重启直到检查完 C 盘进入登录界面看看。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1763 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 23:58 · PVG 07:58 · LAX 15:58 · JFK 18:58
    ♥ Do have faith in what you're doing.