为什么在 Flutter 中提取存档文件时显示的文件不在以 _. 为前缀的存档文件中?

Why does extracting an archive in Flutter show files not in the archive that are prefixed with _.?

我在 Flutter 应用程序中下载了 tar + gzip 文件和 decompress/extract。提取代码如下所示:

final gzDecoder = GZipDecoder();
final tar = await gzDecoder.decodeBytes(file.readAsBytesSync());
final tarDecoder = TarDecoder();
final archive = tarDecoder.decodeBytes(tar);
for (final file in archive) {
    print(file)
    ...

当我像上面那样打印出存档中的所有文件时,我看到如下内容:

./question_7815.mp3
./._question_7814.mp3

原始存档只有 ./question_7815.mp3(不是前缀为 ._ 的文件。

此外,打印文件大小时(print(file.size))我看到前缀为._的文件大小不一样,所以它们实际上看起来是不同的文件,而且它们小得多。

有人知道为什么会发生这种情况以及可能如何预防吗?

那是 Apple Double 格式,因此 tar 文件几乎可以肯定最初来自 Mac。下划线文件包含扩展属性信息。您不一定需要阻止它。您可以忽略这些文件,或在提取过程中排除它们。当 tar 在 Mac 侧响铃以及 tar 的 --no-mac-metadata 选项时,可以不包括它们。