GnuTarEntry 和 PaxTarEntry 默认排除 atime 和 ctime

从 .NET 10 开始, GnuTarEntryPaxTarEntry 创建新条目时不再自动设置访问时间(atime)和更改时间(ctime)字段。 这些字段在 tar 条目中存在问题,因为并非所有 tar 读取器都支持它们。 在读取时,这些字段仍会被保留,并且可以直接设置。 但是,它们不会在本来没有这些的现有条目上设置,也不会在从其他条目类型转换过来时设置。

TarEntry.ModificationTime行为不变。 它对于使用构造函数创建的 tar 条目被初始化为 UtcNow,对于从文件创建的条目则使用文件的修改时间。

已进行其他次要修复,以便 System.Formats.Tar 优先进行从读取到写入的 TarEntry 条目往返,而无需更改。

引入的版本

.NET 10

以前的行为

以前,GnuTarEntryPaxTarEntry 在创建新条目时始终添加 atimectime 值。

新行为

从 .NET 10 开始,只有在以下条件下,GnuTarEntryPaxTarEntry 才会设置 atimectime

  • 该条目从已包含这些字段的 tar 存档中读取。
  • 用户使用适当的属性显式设置它们。

TarEntry.ModificationTime行为保持不变。 它对于使用构造函数创建的 tar 条目被初始化为 DateTime.UtcNow,对于从文件创建的条目则使用文件的修改时间。

破坏性变更的类型

这是行为 变化

更改原因

此更改是为了更好地与其他 tar 文件读取器兼容,并改进 tar 文件的完整往返处理,而无需修改。

大多数用户不需要执行任何作 - 大多数存档都不适用于这些时间戳。

如果需要设置这些字段,可以使用以下 API:

但是,请注意,设置这些字段会创建许多 tar 客户端无法读取的 tar 文件。

受影响的 API