以句点为第一个字符的文件的文件名 + 扩展名是什么(例如:.txt)?

以句点为第一个字符的文件的文件名 + 扩展名是什么(例如:.txt)?

我正在尝试寻找有关这个问题的权威答案,但这很难。维基百科有点回避这个问题,但不够明确。

对于.txt(举例来说),基本名称是否为空且扩展名为txt?或者基本名称.txt(包括句点)和扩展名为空?

那么,类似这样的奇怪的事情怎么办.a.b

我意识到操作系统之间可能存在一些差异,因此我感兴趣的是它们是什么以及建议使用的与操作系统无关的“经验法则”是什么。我计划在服务器中为 Web 应用程序编写解析逻辑,因此它需要分析从许多不同操作系统发送的文件名字符串。

答案1

如果您想要与操作系统无关,则不存在“文件扩展名”之类的东西。某些操作系统实际上可能会使用这些来确定要打开文件的程序,甚至会明确限制它们(想想最多 3 个字符的 FAT)。

但信息也可以从神奇数字或其他启发式方法。文件扩展名只是元数据——从操作系统的角度来看,数据存储在哪里并不重要。例如,在 *nix 中,脚本文件包含舍邦在文件顶部。shebang 会告诉您应该使用哪个解释器来运行该文件,例如/bin/bash/usr/bin/env ruby等。

在 *nix 世界中,“基本名称”就是文件名,/去掉了所有前导部分(即包括最后一个 的路径)。因此, 的基本名称.txt将是.txt。 的基本名称/usr/bin/foo将是foo

以点开头的文件称为点文件。除了在类 Unix 操作系统中,默认情况下它们应该从目录列表中隐藏之外,它们没有任何特殊之处。它们的基本名称是它们的全名,因此.bashrc实际上称为.bashrc。点文件本身没有扩展名。

因此,如果你想保持与操作系统无关,请尝试获取基本名称(在 *nix 意义上)并存储它。其他任何内容都将总是定义模糊。

您还可以尝试提取扩展名,它将是从找到的最后一个点开始的整个基本名称组件,例如,foo.tar.gz显然是一个.gz文件而不是.tar.gz。只有使用 gzip 解压缩时,它才会变成foo.tar,然后才能通过 tar 解压。等等。

相关内容