@stokdenis
junior golang

И снова мой ненавистный tar с ошибкой?

Почему происходит паника при записи хидера?

failed to add /root/Projects to tar: archive/tar: missed writing 443 bytes


в следующем коде

// ...
walker := func(file string, finfo osFileInfo, err error) error {
  // ...
  if err := tw.WriteHeader(hdr); err != nil {
    return err
  }
  tw.Flush()
  // ...
}


Полный код можно взять отсюда
https://github.com/vladimirvivien/go-tar/blob/mast...
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Мало кода, но на первый взгляд это не паника при записи header, а error при попытке tw.Flush(), который вы не проверили. После записи header, нужно залить собственно данные tw.Write(data []byte) и уже потом делать tw.Flush(). Вы в header пообещали залить данные и не залили. Кажется должно быть что то вроде
if err := tw.WriteHeader(hdr); err != nil {
    return err
}
if n, err := tw.Write(content); err != nil { //вот это не видно как вы сделали
    return err
}
if tw.Flush(); err != nil{ //и нужно проверять все ошибки
    return err
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@falconandy
Если непринципиально, попробуйте https://github.com/mholt/archiver. Или подсмотрите как там сделано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы