更全面的原文在这里: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx

为文件命名

尽管每个文件系统对各自的文件夹或文件的命名格式都有具体的规定,但是所有的系统都遵循着一个通用的约定:一个基本文件名(base file name)和一个可选的扩展名,它们之间被一个点号分开。

例如,MS-DOS FAT 文件系统支持8字符长得基本文件名和3字符长的扩展名。这被称为8.3文件名。FAT文件系统和NTFS文件系统没有8.3文件名的限制,因为它们支持长文件名(long file name)。

命名约定

不管是什么文件系统,下面这些规则使应用程序能够创建和处理可用的文件名:

l 使用点号(.)来分割基本文件名和扩展文件名。

l 使用反斜杠(\)将文件路径分割成若干部分。不能使用反斜杠作为文件或文件夹的名字。

但是反斜杠可以作为卷标名的一部分,例如:”C:\”。

统一命名约定(UNC)必须满足如下格式:\\<server>\<share>

l 除了ASCII中编码为0-31的字符或者任何文件系统不允许出现的字符外,可以在代码中使用任何其他字符作为一个文件名。一个文件名可以包含扩展的字符集(128-255)中的字符。但是它不能包含如下保留的字符:< > : “ / \ | ? *

l 在路径中,点号(.)表示当前路径。

l 在路径中,两个连续的点(..)表示当前路径的上级路径。

l 不要使用保留的设备名作为一个文件名:

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9

也不能使用这些名字后面带有一个扩展名,例如:NUL.tx7

l 大小写不敏感。OSCAR, Oscar和oscar是同一个名字。

l 文件名或目录名不要以空格或点号(.)结尾。

尽管基础的文件系统可能支持这样的名字,但是操作系统不支持。

最大路径长度

在Windows API中,路径的最大长度为MAX_PATH,MAX_PATH被定义为260。一个路径的结构如下所示:

|盘符|冒号|反斜杠|被反斜杠所划分的若干部分|NUL(‘\0’)|,例如:D:\<256 chars>NUL.

 

Note:Windows API中的函数将”/”转换成”\”,使之成为NT风格名字的一部分。

许多API函数的Unicode版本允许最大长度大约为32000个字符的路径,这种路径的每个部分最长由255个字符组成。(The Unicode versions of several functions permit a maximum path length of approximately 32,000 characters composed of components up to 255 characters in length)。要指定这种路径,需要使用”\\?\”作为前缀。

NOTE:最大的路径长度:32000字符是一个大概的数字,因为”\\?\”前缀能够扩展为一个更长的字符串,并且这个扩展在总长度中也被计算。

例如:”\\?\D:\<path>”。要指定这样一个UNC路径,使用”\\?\UNC\”前缀。例如:”\\?\UNC\<server>\<share>”。这些前缀本身不作为路径的一部分。它们表示被传递给系统的路径应该做一些最小限度的变化,这意味着不能使用斜杠(/)来表示路径分隔符,并且不能使用一个点号(.)来代表当前路径。同时,带有”\\?\”前缀的路径不能使用相对路径。相对路径被限制在MAX_PATH个字符。

当使用API创建一个目录时,指定的路径不能太长导致不能附加一个8.3格式的文件名。也就是说目录名字不能超过MAX_PATH减去12

shell和文件系统会有不同要求。这就使得我们能够使用API创建一个shell UI不能操纵的路径。

相对路径

对于操纵文件的函数来说,文件名可以是相对于当前路径的。如果一个文件名不以下面的结构开头,则这个文件名是相对于当前路径的:

l 一个盘符,这个盘符后面紧跟着一个冒号,或者是一个server名字和共享名(\\servername\\sharename)

l 一个目录名字分隔符,如一个反斜杠,例如,\subdir

如果文件名以盘符和反斜杠开头,那么它是一个全路径(full path),例如:c:\temp。如果文件名仅以盘符开头,它是一个当前目录的相对路径。例如,c:temp.txt表示C盘当前目录的一个文件。

短文件名和长文件名

通常,Windows在磁盘上存储长文件名作为指定目录的入口,但是这种方式有性能上的缺陷。当你创建一个长文件名时,Windows也创建了一个短的MS-DOS(8.3)格式的文件名。在许多文件系统中,一个短文件名包含一个波浪字符(~),但是不是所有的文件系统都符合这个约定,因此不要做这样的假设。

要想获取一个文件的MS-DOS文件名,长文件名或全路径,你可以按下面的方法做:

l 获取一个长文件名的MS-DOS文件名,使用GetShortPathName函数。

l 获取一个短文件名的长文件名,使用GetLongPathName函数。

l 获取一个文件的全路径,使用GetFullPathName函数。

Windows在磁盘上以Unicode码存储长文件名,这意味着原始的长文件名总是被保存,即使包含扩展的字符。文件名的大小写被保存,但是文件系统是大小写不敏感度的。

长文件名可用的字符集是Unicode文件系统可用的字符集减去冒号(:),冒号在NTFS文件系统中用于打开单个的文件流,这意味着当你在NTFS文件系统和FAT文件系统之间拷贝文件时,不会丢失任何文件名信息。

转载于:https://www.cnblogs.com/hdtianfu/archive/2011/09/27/2193239.html

【翻译】Windows下文件的命名相关推荐

  1. Linux下文件重命名、创建、删除、修改及保存文件

    Linux下文件重命名.创建.删除.修改及保存文件 一.重命名(更名) linux 给文件改名的命令是mv命令 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的 ...

  2. 将windows下文件编码格式转换成UTF-8 文件编码格式

    将windows下文件编码格式转换成UTF-8 文件编码格式 背景说明: 一个芯片厂商的SDK中的所有文件使用的GB2312的中文编码方式,所以在linux下开发的时候会发现中文的部分都是乱码. 因为 ...

  3. Windows下文件搜索最佳神器

    你是不是有时候想找一个文件,但只记得文件名的几个字,然后在某个磁盘或目录下漫无目的的搜索,等了十几分钟也没找到你需要的文件?那你应该试试Everything了,一个Windows平台真正的文件名搜索神 ...

  4. Windows下 批量重命名文件【bat实现】

    目录 前言 一.Windows简单实现重命名 二.使用命令行和Excel实现重命名 前言 在实际应用中,我们经常会遇到将指定文件夹下的文件重命名,以便程序读写. 本文介绍了两种方式,都是在Window ...

  5. 在linux中如何修改保存gun文件_Linux下文件重命名、创建、删除、修改及保存文件...

    一.重命名(更名) linux 给文件改名的命令是mv命令 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和move命令的组合.它的使用权限是所有用户. ...

  6. linux下文件重命名

    在使用rename命令时,遇到如下错误:Bareword "Abyssinian" not allowed while "strict subs" in use ...

  7. WINDOWS下文件夾里到底有什麼,各個文件夾都代表的什麼?

    ├-WINDOWS │ ├-system32(存放Windows的系统文件和硬件驱动程序) │ │ ├-config(用户配置信息和密码信息) │ │ │ └-systemprofile(系统配置信息 ...

  8. Windows下 文件夹加密

    此加密方法會使这个特殊的文件夹用正常情况不可打開也不可删除,可以起到保护重要资料的作用. 在Windows中"\"符号是路径的分隔符,比如"C:\Windows\Syst ...

  9. Windows下文件的所有和权限

    跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...

  10. Windows下文件批量重命名bat脚本

    Windows平台之文件批量重命名,在日常工作还是较频繁的,本文特整理为bat脚本,并列表不同的实现方法. 目录 1.批量重命名要点分析 2.批量重命名bat脚本 3.批量重命名脚本演示 运行环境: ...

最新文章

  1. 数据通信技术(十:OSPF特殊区域TOTALLY STUB配置(ZTE))
  2. Bug 是一门艺术 | 每日趣闻
  3. 航天智慧物流!智能汽车竞赛—航天赛道开始报名啦!
  4. java sql sum函数的使用方法_SQL常用汇总函数用法说明
  5. Cocos2d-x3.0 不规则Button
  6. 两点之间 这题有毒啊,不会做
  7. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...
  8. Struts2 简单的上传文件并且显示图片
  9. hive 筛选出数字_后悔没早点学会这几个万能的Excel筛选技巧,这些操作技巧得记牢...
  10. WINDOWS SERVER 2012标准版密钥
  11. 电脑麦克风,详细教你电脑麦克风没声音怎么设置
  12. 标准差σ未知_标准差σ的4种计算公式
  13. kafka no record information is available
  14. IT售前工程师需要掌握哪些技术
  15. 如何批量获取过期老域名
  16. Docker从入门到上瘾,万字终极指南!
  17. 关于SDRAM存储器
  18. acwing——数学知识(四)Nim游戏
  19. 整流器的输入滤波电容的选择
  20. 信号发生器的设计(期末课程设计)

热门文章

  1. python进度条代码怎么写_Python实现控制台中的进度条功能代码
  2. linux安装postgresql数据库
  3. BIO,NIO,AIO总结
  4. MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
  5. C#项目实例中读取并修改App.config文件
  6. 如何对 Oracle 数据泵(expdp/impdp) 进行 debug
  7. Golang: How to sort struct with multiple sort parameters?
  8. ABAP术语-Update Task
  9. [LeetCode] 125. Valid Palindrome Java
  10. 北京集训②DAY1 Morning