【问题标题】:In a filename, is the dot . a part of the file extension?在文件名中,是点。文件扩展名的一部分?
【发布时间】:2018-03-20 13:54:40
【问题描述】:

一个文件有一个文件名和一个扩展名,它们之间通常用一个点(句号)作为分隔符。这个描述告诉我们点不是扩展的一部分,但在声明扩展时,我们通常包括点。

例如,文件名为“image”的 PNG 文件通常写为 image.png。但是我们通常说.png 像点一样的扩展名是扩展名的一部分。我只是好奇,点是它们之间的分隔符还是扩展的一部分,即扩展是“png”还是“.png”?

【问题讨论】:

  • 意见问题……可能会因上下文而异。

标签: file definition


【解决方案1】:

根据文件扩展名上的Wikipedia article

确切的定义,给出决定文件名的哪一部分是其扩展名的标准,属于所使用的特定文件系统的规则;通常扩展是跟随点字符的最后一次出现(如果有的话)的子字符串

“png”在技术上是文件扩展名,尽管您总是在 final 句号之后查找文件扩展名。

【讨论】:

  • 一个有趣的地方是 *.tar.gz 文件,它们实际上是两个文件,一个 tar 存档,然后压缩成一个 gzip 文件。只是一个常见的双重扩展示例。
  • 同时,在 Windows 中,extension 包含点字符。例如,在 cmd 脚本中,对于 'filename.ext' %~x1 扩展为 with 点 - '.ext'。但是,如果文件名以点字符('filename.')结尾,%~x1 会扩展为空字符串,而不是单个点字符。
【解决方案2】:

在 .NET API 中,点被视为扩展的一部分。

此方法通过在路径中搜索句点 (.) 来获取路径的扩展名,从路径中的最后一个字符开始,一直到第一个字符。如果在DirectorySeparatorCharAltDirectorySeparatorChar 字符之前找到句点,则返回的字符串包含句点及其后面的字符;否则返回String.Empty

// GetExtension('C:\mydir.old\myfile.ext') returns '.ext'
// GetExtension('C:\mydir.old\') returns ''

这对我来说很重要,因为我正在建模一个依赖于某个活动的可配置文件扩展名的类,因此我将. 字符作为属性值文本的一部分:

public string CacheFileExtension { get; } = ".cache"

【讨论】:

  • 我一直认为这种行为是不正确的——“点”是无关紧要的。
  • @Robear 很可能是这样(我个人对此没有强烈的看法),但这不是重点。您必须根据您所针对的框架定义的规则进行编程,因此将点作为扩展的一部分是进入 .Net 恕我直言的方式。
【解决方案3】:

png 是扩展名,虽然没有. 它只是一个默认文件格式,无法打开

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2013-12-19
    • 2012-11-24
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多