Publish for real
2 files changed
tree: a78de2dd68c4b4156ffc72a22ed3f1c28620f8b4
  1. .github/
  2. example/
  3. lib/
  4. reference/
  5. test/
  6. tool/
  7. .gitignore
  8. CHANGELOG.md
  9. LICENSE
  10. README.md
  11. analysis_options.yaml
  12. pubspec.yaml
README.md

tar

Build status

This package provides stream-based readers and writers for tar files.

When working with large tar files, this library consumes considerably less memory than package:archive, although it is slightly slower.

Reading

To read entries from a tar file, use

import 'dart:io';
import 'package:tar/tar.dart' as tar;

Future<void> main() async {
  final tarFile = File('file.tar')
       .openRead()
       .transform(tar.reader);

  await for (final entry in tarFile) {
    print(entry.name);
    print(await entry.transform(utf8.decoder).first);
  }
}

To read .tar.gz files, transform the stream with gzip.decoder first.

Writing

You can write tar files into a StreamSink<List<int>>, such as an IOSink:

import 'dart:io';
import 'package:tar/tar.dart' as tar;

Future<void> main() async {
  final output = File('test.tar').openWrite();

  await Stream<tar.Entry>.value(
    tar.MemoryEntry(
      tar.Header(
        name: 'hello.txt',
        mode: int.parse('644', radix: 8),
      ),
      utf8.encode('Hello world'),
    ),
  ).pipe(tar.WritingSink(output));
}

Note that tar files are always written in the format defined by the POSIX.1-2001 specification (--format=posix in GNU tar).

Features

  • Supports ustar archives
  • Supports extended pax headers for long file or link names