РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1346 of 1593 menu

Метод zip.File.Open

Метод zip.File.Open открывает файл, представленный структурой zip.File, для чтения. Он возвращает интерфейс io.ReadCloser, который позволяет читать содержимое файла из архива. После завершения работы с файлом необходимо вызвать метод Close для освобождения ресурсов. Метод не принимает никаких параметров и работает только с уже открытым архивом, полученным через zip.OpenReader или zip.NewReader.

Синтаксис

file.Open() (io.ReadCloser, error)

Пример

Давайте откроем zip-архив и прочитаем содержимое первого файла:

package main import ( "archive/zip" "fmt" "io" "log" ) func main() { r, err := zip.OpenReader("archive.zip") if err != nil { log.Fatal(err) } defer r.Close() for _, f := range r.File { rc, err := f.Open() if err != nil { log.Fatal(err) } defer rc.Close() data, err := io.ReadAll(rc) if err != nil { log.Fatal(err) } fmt.Printf("%s: %s\n", f.Name, data) break } }

Результат выполнения кода:

"file.txt: Hello, World!"

Пример

Давайте прочитаем содержимое конкретного файла из архива по имени:

package main import ( "archive/zip" "fmt" "io" "log" ) func main() { r, err := zip.OpenReader("archive.zip") if err != nil { log.Fatal(err) } defer r.Close() target := "data.txt" var found bool for _, f := range r.File { if f.Name == target { found = true rc, err := f.Open() if err != nil { log.Fatal(err) } defer rc.Close() data, err := io.ReadAll(rc) if err != nil { log.Fatal(err) } fmt.Printf("Content of %s: %s\n", target, data) break } } if !found { fmt.Printf("File %s not found in archive\n", target) } }

Результат выполнения кода:

"Content of data.txt: This is the content of data.txt file"

Пример

Давайте обработаем ошибку при попытке открыть файл из архива:

package main import ( "archive/zip" "fmt" "log" ) func main() { r, err := zip.OpenReader("archive.zip") if err != nil { log.Fatal(err) } defer r.Close() for _, f := range r.File { rc, err := f.Open() if err != nil { fmt.Printf("Failed to open %s: %v\n", f.Name, err) continue } fmt.Printf("Successfully opened %s\n", f.Name) rc.Close() } }

Результат выполнения кода:

"Successfully opened file1.txt" "Successfully opened file2.txt"

Смотрите также

  • функцию zip.OpenReader,
    которая открывает zip-архив для чтения
  • функцию zip.NewReader,
    которая создает новый Reader из io.ReaderAt
  • структуру zip.File,
    которая представляет файл внутри архива
  • структуру zip.FileHeader,
    которая содержит метаданные файла в архиве
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить