Метод 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,
которая содержит метаданные файла в архиве