V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bjzhou1990
V2EX  ›  Windows

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

  •  2
     
  •   bjzhou1990 · 242 天前 · 5354 次点击
    这是一个创建于 242 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    33 条回复    2023-08-30 13:03:22 +08:00
    kkk9
        1
    kkk9  
       242 天前   ❤️ 2
    Program File
    Program File (x86)

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

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

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

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

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