Arşivler, birkaç dosyayı tek bir biçimde, genellikle zip, tar veya rar biçiminde bir araya toplar. Arşiv dosyaları, toplam dosya boyutunu azaltmak için sıkıştırmayı da kullanabilir.
Web sayfaları da dahil olmak üzere yazılım ve verileri dağıtmak için arşivleri kullanabilirsiniz. Ayrıca, uygulamanızı tüm dosyaları ve bağımlılıklarıyla birlikte kullanıcıların indirmesi ve kurması için arşivleyebilirsiniz.
Go'nun arşiv paketi, tar ve zip formatlarında arşivler oluşturmanıza ve çıkarmanıza olanak tanır.
Go'nun Arşiv Paketi
Git sağlar Arşiv çeşitli arşiv biçimleriyle çalışmak için paketler. kullanabilirsiniz zip Ve katran Bu biçimlerde arşiv dosyaları oluşturmak, okumak ve yazmak için paketler. Her iki paket de kullanımı kolay bir API üzerinden çeşitli sıkıştırma algoritmalarını destekler.
Zip ve tar paketlerini Go dosyalarınıza şu şekilde aktarabilirsiniz:
içe aktarmak (
"arşiv/zip"
"arşiv/tar"
)
Paketleri içe aktardıktan sonra, bunları arşiv dosyaları oluşturmak ve değiştirmek için kullanabilirsiniz.
Tar Arşivlerine Dosya Oluşturma ve Ekleme
bu katran paket tar ile çalışır tar ve tar.gz biçimlerinin arşivleri, PAX genişletilmiş başlıkları ile dosya okuma ve yazma desteği dahil.
tar paketi şunları sağlar: Yeni Yazar yeni tar arşivleri oluşturma işlevi. NewWriter bir alır io. yazar bir dosya veya bellek arabelleği olabilen ve arabelleğe bir işaretçi döndüren arabirim örneği. katran. yazar yapı
paket ana
içe aktarmak (
"arşiv/tar"
"işletim sistemi"
)işlevana() {
// yeni bir dosya oluştur
dosya, _ := işletim sistemi. Yaratmak("arşivim.tar")
ertelemek dosya. Kapalı()
// yeni bir tar arşivi oluştur
tarWriter := tar. NewWriter (dosya)
ertelemek tarYazıcı. Kapalı()
}
bu Yaratmak işlevi işletim sistemi package yeni bir tar dosyası oluşturur. bu katran. Yeni Yazar işlev bir dosyayı alır ve yeni bir arşiv oluşturur.
tar arşivine dosya ekleyebilirsiniz. Başlığı Yaz Ve Yazmak fonksiyonlar. WriteHeader işlevi bir katran. Başlık argüman olarak yapı. Bu, dosya adı, boyutu ve izin bitleri gibi dosyanın meta verilerini içerir. Yazma işlevi, bir dosyanın içeriğini arşive yazar.
içe aktarmak (
"arşiv/tar"
"fmt"
"yo"
"kayıt"
"işletim sistemi"
)işlevana() {
// yeni bir dosya oluştur
dosya, _ := işletim sistemi. Yaratmak("arşivim.tar")
dosya, _ = işletim sistemi. Yaratmak("mesaj.txt")
ertelemek dosya. Kapalı()// yeni bir tar arşivi oluştur
tarWriter := tar. NewWriter (dosya)
ertelemek tarYazıcı. Kapalı()
// Arşive bir dosya ekle
fileToAdd, _ := işletim sistemi. Açık("dosya1.txt")
ertelemek dosyaEklenecek. Kapalı()
fileInfo, _ := fileToAdd. İstatistik()
başlık, _ := tar. FileInfoHeader (fileInfo, "")
tarYazıcı. WriteHeader (başlık)
_, _ = io. Kopyala (tarWriter, fileToAdd)
fmt. Yazdır("TAR arşiv işlemi tamamlandı")
}
Program, yeni tar ve metin dosyaları oluşturur. Yaratmak işlevi işletim sistemi paketi ve yeni bir tar arşivi ile Yeni Yazar, dosyayı arşive eklemeden önce.
bu Açık işlevi arşive eklemek için dosyayı açar. adlı bir dosyaya ihtiyacınız olacağını unutmayın. dosya1.txt Bu programı başarıyla çalıştırmak için çalışma dizininizde.
kullanabilirsiniz İstatistik tar başlığı için ihtiyaç duyacağınız meta verileri almak için bir dosya örneğinin işlevi. Sonucu şuraya ilet: DosyaBilgisiBaşlığı, ardından bu sonucu Başlığı Yaz tar dosyasını ayarlamak için işlev. Son olarak, kullanarak dosyayı arşive kopyalayın. io. kopyala.
Dosyaları Tar Arşivlerinden Çıkarma
kullanabilirsiniz YeniOkuyucu tar arşiv dosyasının içeriğini okumak için işlev. NewReader işlevi bir io. Okuyucu bir dosya veya bellek arabelleği olabilen arabirim. Bir işaretçi döndürür katran. Okuyucu yapı
içe aktarmak (
"arşiv/tar"
"yo"
"işletim sistemi"
)işlevana() {
// tar arşivini aç
dosya, _ := işletim sistemi. Açık("arşivim.tar")
ertelemek dosya. Kapalı()// yeni bir tar okuyucu oluştur
tarOkuyucu := tar. Yeni Okuyucu (dosya)// Arşivdeki dosyalar üzerinde yineleme yapın
için {
başlık, hata := tarReader. Sonraki()eğer hata == io. {
kırmak
}
// dosyayı ayıklayın
outFile, _ := işletim sistemi. Oluşturun (başlık. İsim)
ertelemek outFile. Kapalı()
_, _ = io. Kopyala (outFile, tarReader)
}
}
bu döngü için sonsuz tar okuyucu örneğini geçer ve her dosyayı ben paketin kopyala işlev.
Zip Arşivlerine Dosya Oluşturma ve Ekleme
ile yeni bir zip arşivi oluşturabilirsiniz. Yeni Yazar işlevi zip paket. NewWriter işlevi bir dosya örneğini alır ve bir zip yazıcısı döndürür.
içe aktarmak (
"arşiv/zip"
"işletim sistemi"
)işlevana() {
// yeni bir dosya oluştur
dosya, hata := işletim sistemi. Yaratmak("arşiv.zip")eğer hata!= sıfır {
panik(hata)
}ertelemek dosya. Kapalı()
// Yeni bir zip yazıcı oluştur
zipWriter := zip. NewWriter (dosya)
ertelemek zipWriter. Kapalı()
}
bu zip Yazarı değişken yeni depolar yazar NewWriter'ın döndürdüğü örnek.
Zip arşivlerinize dosya ekleyebilirsiniz. Yaratmak Writer örneğinin işlevi. Create işlevi dosya adını alır. Şunu da kullanabilirsiniz: Yazmak zip arşivlerindeki dosyalara veri yazmak için zip dosyası örneğinin işlevi.
içe aktarmak (
"arşiv/zip"
"işletim sistemi"
)işlevana() {
// yeni dosyalar oluştur
dosya, hata := işletim sistemi. Yaratmak("arşiv.zip")
dosya, hata = işletim sistemi. Yaratmak("dosya1.txt")
dosya, hata = işletim sistemi. Yaratmak("dosya2.txt")eğer hata!= sıfır {
panik(hata)
}ertelemek dosya. Kapalı()
// Yeni bir zip yazıcı oluştur
zipWriter := zip. NewWriter (dosya)
ertelemek zipWriter. Kapalı()// Arşive dosya ekle
dosya1, hata := zipWriter. Yaratmak("dosya1.txt")eğer hata!= sıfır {
panik(hata)
}dosya2, hata := zipWriter. Yaratmak("dosya2.txt")
eğer hata!= sıfır {
panik(hata)
}
// Arşivdeki dosyalara veri yaz
dosya1.Yaz([]bayt("Selam Dünya!"))
dosya2.Yaz([]bayt("Hoşçakal Dünya!"))
fmt. Yazdır("zip arşivleme işlemi tamamlandı")
}
Ana işlev şunu kullanarak başlar: Yaratmak yeni bir zip dosyası ve iki metin dosyası oluşturmak için. Ardından, iki metin dosyasını arşive eklemek için iki Yazıcı oluşturur. bu Yazmak her dosya örneğinin işlevi, arşivdeki dosyaların her birine mesaj yazar.
Dosyaları Zip Arşivlerinden Çıkarma
Mevcut bir zip dosyasını okuyarak ayıklayabilirsiniz. AçıkOkuyucu işlevi, ardından içeriği arasında döngü ve dosyaları kopyalama ben paket.
içe aktarmak (
"arşiv/zip"
"fmt"
"yo"
"işletim sistemi"
)işlevana() {
// arşivi aç
zipReader, hata := zip. OpenReader("arşiv.zip")eğer hata!= sıfır {
panik(hata)
}ertelemek zipOkuyucu. Kapalı()
// Dosyaları arşivden çıkarın
için _, dosya := menzil zipOkuyucu. Dosya {
sıkıştırılmış Dosya, hata := dosya. Açık()eğer hata!= sıfır {
panik(hata)
}ertelemek sıkıştırılmış Dosya Kapalı()
// Sıkıştırılmış dosyayla aynı ada sahip yeni bir dosya oluşturun
ExtractedFile, err := işletim sistemi. Dosya oluştur. İsim)eğer hata!= sıfır {
panik(hata)
}ertelemek ExtractedFile. Kapalı()
// Sıkıştırılmış dosyadaki verileri yeni dosyaya kopyalayın
_, hata = io. Kopyala (extractedFile, zippedFile)eğer hata!= sıfır {
panik(hata)
}
fmt. Yazdır("Çıkartıldı %s\n", dosya. İsim)
}
}
bu AçıkOkuyucu işlev zip arşivlerini okur. bu AçıkOkuyucu işlev, zip dosyası adını bağımsız değişken olarak kabul eder ve bir zip dosyası okuyucu örneği döndürür. bu aralık için döngü, okuyucu örneğindeki dosyaların içeriğinden geçer. Orijinal dosyayla aynı ada sahip yeni bir dosya oluşturur ve ayıklanan dosyanın içeriğini kullanarak yeni dosyaya kopyalar. io. kopyala işlev.
Elle veya Programlı Olarak Sıkıştırmayı Açın - Size Bağlı
Sıkıştırılacak çok sayıda dosyanız veya arşiviniz varsa, dosyaları programlı olarak açmak kullanışlıdır. Arşiv işlevini ana uygulamanıza da entegre ediyor olabilirsiniz.
Diğer durumlarda, mevcut uygulamaları kullanmanız daha iyi olabilir. Windows, macOS ve Linux'ta arşivleri açmak için yerleşik veya üçüncü taraf uygulamaları kullanabilirsiniz.