本文介绍对文件和文件夹名称中的空格字符的支持。
原始 KB 数: 2829981
总结
将保存以 ASCII 空格开头或结尾的文件和文件夹名称(0x20),而无需这些字符。 以 ASCII 句点(0x2E)字符结尾的文件和文件夹名称也将保存,而不保存此字符。 将保留所有其他尾随或前导空格字符。
例如:
- 如果文件保存为“Foo.txt”,其中前导字符为 ASCII 空格(0x20),则会将其另存为文件系统“Foo.txt”。
- 如果文件保存为“Foo.txt”,其中尾随字符是 ASCII 空格(0x20),则会将其另存为文件系统“Foo.txt”。
- 如果文件保存为“。Foo.txt“,其中前导字符是 ASCII 句点(0x2E),它将另存为文件系统”。Foo.txt'。
- 如果文件保存为“Foo.txt.”,其中尾随字符是 ASCII 句点(0x2E),则会将其另存为文件系统“Foo.txt”。
- 如果文件保存为“Foo.txt”,其中前导字符(s)是备用空格字符,如象形图空间(0x3000),则该文件将保存到文件系统中为“Foo.txt”。 不会删除前导空格字符。
- 如果文件保存为“Foo.txt”,其中尾随字符(s)是备用空格字符,如象形图空间(0x3000),它将另存为文件系统“Foo.txt”。 不会删除尾随空格字符。由于生态系统要求,Win32 和 WinRT API 以不同的方式枚举以空格字符开头或结尾的文件和文件夹名称。
详细信息
空格字符
有各种空格字符表示各种“空格”宽度(字形)。 只有 ASCII 空格(0x20)和 ASCII 句点(0x24)字符由对象管理器专门处理。 虽然象形字空间字符(0x3000)也是通过使用空格键(启用 IME 时)生成的,但它不会专门处理。
- 0x0020 SPACE
- 0x00A0无中断空间
- 0x1680 OGHAM SPACE MARK
- 0x180E蒙古元音分隔符
- 0x2000 EN QUAD
- 0x2001 EM QUAD
- 0x2002 EN SPACE
- 0x2003 EM SPACE
- 0x2004 3-PER-EM 空间
- 0x2005 PER-EM 空间四
- 0x2006 6-PER-EM 空间
- 0x2007图空间
- 0x2008标点空间
- 0x2009薄空间
- 0x200A发型空间
- 0x200B零宽度空间
- 0x202F窄无中断空间
- 0x205F中等数学空间
- 0x3000象形图空间
- 0xFEFF零宽度无中断空间
对象管理器
创建后,对象管理器会删除文件或文件夹名称开头或结尾的 ASCII 空格(0x20) 字符。
创建后,对象管理器会删除文件或文件夹名称末尾的 ASCII 句点(0x2E)字符。
对象管理器保留所有其他前导或尾随空格字符。
API 枚举
Win32 API
Win32 API(CreateFile、 FindFirstFile 等)使用直接方法枚举本地或远程文件系统上的文件和文件夹。 无论包含空格字符或位置如何,都可以发现所有文件和文件夹。
WinRT API
WinRT API 旨在支持多个数据提供程序(物理驱动器、OneDrive、Facebook 等)。 为此,WinRT API 使用搜索引擎枚举文件和文件夹。 由于枚举的搜索方法,WinRT API(StorageFile、 StorageFolder 等)不会处理包含 ASCII 空间(0x20)和 ASCII 期间(0x2E)以外的尾随空格字符的文件和文件夹名称,这些字符位于本地或远程文件系统上。 它处理前导非 ASCII 空格字符。
观察到的行为
文件资源管理器 和桌面应用程序
无论包含空格字符或位置如何,文件资源管理器和桌面应用程序中都可以看到所有文件和文件夹。
Microsoft Store 应用程序
使用文件选取器时,不会显示带有尾随非 ASCII 空格字符的文件。 带有尾随非 ASCII 空格字符的子文件夹的内容不会显示在文件选取器中。 将显示包含前导非 ASCII 空格字符的文件或文件夹。