none
bellekte Dosya zipleme RRS feed

  • Soru

  • Ben programımda dosyayı veri tabanına kaydediyorum arkadaşlar

    Ama çok yer kaplamasın diye bunu zipleyip kaydetmek istiyorum

    Ziplemeyi aşağıdaki gibi kodalarla yapabiliyorum ama bu sefer klasörde fiziki oalrak bir zip dosyası oluşturmak için fazla zaman harcıyorum

    Bu işi bellekte nasıl yapabilirim 

    Vbnet de böyle bir şeyler var bellekte file yaratma filan ama hiç bilgim yok kurgusu hakkında

    Şu kod mesela normal zipleme kodu. Bunu bilgisayarda file yaratmadan nasıl ziplerim ve o bellekteki dosya yı kullanırım

     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim zipPath As String = "C:\TEMP\Compression\myzip.zip"
            Dim fileToAdd As String = "C:\TEMP\Compression\Compress Me.txt"
    
            'Open the zip file if it exists, else create a new one 
            Dim zip As Package = ZipPackage.Open(zipPath, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite)
    
            'Replace spaces with an underscore (_) 
            Dim uriFileName As String = fileToAdd.Replace(" ", "_")
    
            'A Uri always starts with a forward slash "/" 
            Dim zipUri As String = String.Concat("/", IO.Path.GetFileName(uriFileName))
    
            Dim partUri As New Uri(zipUri, UriKind.Relative)
            Dim contentType As String = _
                      Net.Mime.MediaTypeNames.Application.Zip
    
            'The PackagePart contains the information: 
            ' Where to extract the file when it's extracted (partUri) 
            ' The type of content stream (MIME type) - (contentType) 
            ' The type of compression to use (CompressionOption.Normal) 
            Dim pkgPart As PackagePart = _
                      zip.CreatePart(partUri, contentType, CompressionOption.Normal)
    
            'Read all of the bytes from the file to add to the zip file 
            Dim bites As Byte() = File.ReadAllBytes(fileToAdd)
    
            'Compress and write the bytes to the zip file 
            pkgPart.GetStream().Write(bites, 0, bites.Length)
    
            zip.Close() 'Close the zip file
        End Sub
    

    19 Mayıs 2016 Perşembe 10:54

Yanıtlar

Tüm Yanıtlar

  • FileStream yerine MemoryStream kullanarak
    19 Mayıs 2016 Perşembe 16:34
    Moderatör
  • Teşekkür ederim bunu soruyordum çözdüm sorunu sayende

    edit;

    yapamamışım yanıldım hala ziplemeden yüklüyor beceremedim MemoryStream de sıkıştırıp mdb ye yüklemeyi daha

    hazır bir şeyler olsa

    Bellekte nasıl bir file ı sıkıştırıp byte dizisine aktarıcam 


    • Düzenleyen hakan1992 20 Mayıs 2016 Cuma 01:44
    19 Mayıs 2016 Perşembe 22:58
  • tamam buldum hallettim çok güzel oldu 

    harika oldu inanılmaz faydalı 15000 kb lık text dosya mdb de sadece 100 kb artışa sebep oldu.  

    Public Function DecompressGZip(bytesToDecompress As Byte()) As Byte()
    	Using stream As New GZipStream(New MemoryStream(bytesToDecompress), CompressionMode.Decompress)
    		Const size As Integer = 4096
    		Dim buffer As Byte() = New Byte(size - 1) {}
    		Using memoryStream As New MemoryStream()
    			Dim count As Integer
    			Do
    				count = stream.Read(buffer, 0, size)
    				If count > 0 Then
    					memoryStream.Write(buffer, 0, count)
    				End If
    			Loop While count > 0
    			Return memoryStream.ToArray()
    		End Using
    	End Using
    End Function
     
    Public Function CompressGZip(input As String, Optional encoding As Encoding = Nothing) As Byte()
    	encoding = If(encoding, Encoding.Unicode)
    	Dim bytes As Byte() = encoding.GetBytes(input)
    	Using stream As New MemoryStream()
    		Using zipStream As New GZipStream(stream, CompressionMode.Compress)
    			zipStream.Write(bytes, 0, bytes.Length)
    			Return stream.ToArray()
    		End Using
    	End Using
    End Function


    20 Mayıs 2016 Cuma 02:33