ZIP di un file senza comprimere tutto il percorso

di marcello75 il
8 risposte

Buongiorno,

ho un problema con lo zip di un file tramite VbNet.

il codice che utilizzo è:

Dim Zip = New ZipFile("c:\temp\MyZipFile.zip")

Zip.AddFile("c:\temp\prova.csv")

Zip.Save()

Funziona regolarmente ma lo Zip contiene il percorso del File zippato.

Io vorrei trovare nella cartella Temp il file MyZipFile.zip che contiene il file prova.csv, invece trovo la cartella   MyZipFile.zip con \temp\prova.csv

Prima di postare ho cercato nel forum ma non ho trovato roisposta.

Potete darmi un aiuto?

grazie

8 Risposte

  • 26/06/2025 - marcello75 ha scritto:

    il codice che utilizzo è:

    Ma che libreria stai usando? In System.IO.Compression c'è la classe ZipFile ma non espone il metodo AddFile...

    Io l'unica cosa che ho trovato è l'Extension Method CreateEntryFromFile.

  • Probabilmente sta usando DotNetZip.dll della Ionic

  • Esatto Sirjo, Se avete un metodo alternativo non esitate a darmelo, io devo risolvere solo questo problema.

    Grazie per il supporto

  • Guardando in giro ho trovato questa funzione:

    Per zippare un file in VB.NET senza memorizzare il percorso, puoi utilizzare la libreria System.IO.Compression e la classe ZipArchive. La chiave è creare un ZipArchive specificando un flusso di output e poi aggiungere i file senza specificare il percorso completo.

    Ecco un esempio di come farlo:

    Public Sub ZipFiles(ByVal filesToZip() As String, ByVal zipFilePath As String)
            ' Crea un nuovo archivio ZIP
            Using archive As ZipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create)
                For Each filePath In filesToZip
                    ' Ottieni solo il nome del file, senza il percorso
                    Dim fileName As String = Path.GetFileName(filePath)

                    ' Crea una voce nell'archivio
                    Dim entry As ZipArchiveEntry = archive.CreateEntry(fileName)

                    ' Scrivi i dati del file nella voce dell'archivio
                    Using stream As Stream = entry.Open()
                        Using fileStream As FileStream = File.OpenRead(filePath)
                            fileStream.CopyTo(stream)
                        End Using
                    End Using
                Next
            End Using
        End Sub

    Copiando il codice in progetto viene sottolineato l'errore sulla seguente porzione di codice:

     Using archive As ZipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create)

    ERRORE: BC36010: L'operando 'Using' di tipo 'ZipArchive' deve implementare 'System.Idisposable'

    Qualcuno sa aiutarmi?

    Grazie in anticipo

  • Non usare la using

  • Lieto di vedere ancora una volta che la IA è messa peggio di me. XD

    27/06/2025 - marcello75 ha scritto:

    viene sottolineato l'errore sulla seguente porzione di codice

    devi avere qualche conflitto nei riferimenti agli assembly perché ZipArchive implementa IDisposable. Cos'hai come Imports in testa al modulo?

  • 27/06/2025 - marcello75 ha scritto:

    Zip.AddFile("c:\temp\prova.csv")

    Modifica la riga in
    Zip.AddFile("c:\temp\prova.csv", "")

    il secondo parametro, se specificato, dice in quale cartella del file ZIP mettere il file

  • ..... sei riuscito a risolvere ??

Devi accedere o registrarti per scrivere nel forum
8 risposte