Sıkıştırma / açma ise Klasörler ve Dosyalar

oy
42

Herkes sıkıştırmak veya hızlı C # dosya ve klasörleri açmak için iyi bir yol biliyor mu? büyük dosyaları Handling gerekli olabilir.

Oluştur 01/08/2008 saat 18:13
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
24

.Net 2.0 Framework ad System.IO.CompressionGZip ve Deflate algoritmalarını destekler. Burada sıkıştırmak ve size dosya nesneden alabilirsiniz bir bayt akışı sıkıştırmasını iki yöntem vardır. Sen subsitute edebilirsiniz GZipStreamiçin DefaultStreamaşağıda bu algoritmayı kullanmak yöntemlerde. Bu hala olsa farklı algoritmalar ile sıkıştırılmış dosyaları tutulması sorunu bırakır.

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();

    return output.ToArray();
}

public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;

    GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buff = new byte[64];
    int read = -1;

    read = gzip.Read(buff, 0, buff.Length);

    while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }

    gzip.Close();

    return output.ToArray();
}
Cevap 05/08/2008 saat 13:04
kaynak kullanıcı

oy
21

Hep SharpZip Kütüphanesi kullandım.

İşte bir bağlantı var

Cevap 01/08/2008 saat 18:30
kaynak kullanıcı

oy
10

Net 1.1 itibariyle sunulan tek yöntem java kütüphaneleri içine ulaşıyor.
J # Sınıf Kütüphaneleri Zip sınıfları kullanarak C # ile Dosya ve Veri basmak
bu son sürümlerinde değişti emin değilim.

Cevap 01/08/2008 saat 18:28
kaynak kullanıcı

oy
8

Benim cevabım gözlerini kapat ve tercih olacağını DotNetZip . Büyük bir topluluk tarafından test edilmiştir.

Cevap 17/11/2013 saat 17:08
kaynak kullanıcı

oy
8

Bir kullanabilir böyle SharpZip olarak 3. taraf kitaplığı Tom belirttiği gibi.

(3-parti gitmeden) bir başka yolu, Windows Shell API kullanmaktır. Eğer C # projesi, Microsoft Shell Kontrolleri ve Otomasyon COM kitaplığa bir başvuru ayarlamak gerekir. Gerald Gibson bir örnek de var

http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx

Ölü sayfasının İnternet Arşivi'nin kopya

Cevap 01/08/2008 saat 19:04
kaynak kullanıcı

oy
6

GZipStream kullanmak için gerçekten iyi bir yardımcı programdır.

Cevap 13/05/2012 saat 03:01
kaynak kullanıcı

oy
6

Bu java yapmak çok kolaydır ve C # java.util.zip kütüphaneleri içine ulaşabilir yukarıdaki gibi belirtti. referanslar için bkz:

java.util.zip Javadocs
örnek kod

Ben bir klasör yapısı derin (özyinelemeli) zip yapmak için bir süre önce bu kullanılan, ancak şimdiye kadar unzipping kullanılan sanmıyorum. Çok motive oldum ben dışarı bu kodu çekin ve burada daha sonra içine düzenleyebilir.

Cevap 05/08/2008 saat 00:52
kaynak kullanıcı

oy
5

Başka iyi bir alternatif de DotNetZip .

Cevap 08/12/2011 saat 23:29
kaynak kullanıcı

oy
0

Bu yöntemle zip dosyası oluşturabilirsiniz:

public async Task<string> CreateZipFile(string sourceDirectoryPath, string name)
    {
        var path = HostingEnvironment.MapPath(TempPath) + name;
        await Task.Run(() =>
        {
            if (File.Exists(path)) File.Delete(path);
            ZipFile.CreateFromDirectory(sourceDirectoryPath, path);
        });
        return path;
    }

ve sonra bu yöntemlerle zip dosyasını açmanız edebilirsiniz:
1- zip dosyası yolu ile bu yöntem işe

public async Task ExtractZipFile(string filePath, string destinationDirectoryName)
    {
        await Task.Run(() =>
        {
            var archive = ZipFile.Open(filePath, ZipArchiveMode.Read);
            foreach (var entry in archive.Entries)
            {
                entry.ExtractToFile(Path.Combine(destinationDirectoryName, entry.FullName), true);
            }
            archive.Dispose();
        });
    }

Posta dosya akışı ile 2- bu yöntem iş

public async Task ExtractZipFile(Stream zipFile, string destinationDirectoryName)
    {
        string filePath = HostingEnvironment.MapPath(TempPath) + Utility.GetRandomNumber(1, int.MaxValue);
        using (FileStream output = new FileStream(filePath, FileMode.Create))
        {
            await zipFile.CopyToAsync(output);
        }
        await Task.Run(() => ZipFile.ExtractToDirectory(filePath, destinationDirectoryName));
        await Task.Run(() => File.Delete(filePath));
    }
Cevap 09/01/2018 saat 18:35
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more