VB_NET_Modificare file Zip

di il
26 risposte

26 Risposte - Pagina 2

  • Re: VB_NET_Modificare file Zip

    Il codice elimina il file e lo ricrea senza la linea, il codice è funzionante e il file viene aggiornato nello zip. Quindi se hai problemi col server vuol dire che quello fa controlli che non posso conoscere. 

  • Re: VB_NET_Modificare file Zip

    Probabilmente quando lo riscrive non lo riscrive con il formato di prima….pensavo se invece di riscriverlo si potrebbe inserire un (#) per commentare la linea e possibile...??

  • Re: VB_NET_Modificare file Zip

    Ho fatto in questo modo e funziona solo che poi devo ricomporre il file originale con il contenuto che sta in (C:\Zip_Extract) sono tre directory che devo sovrascrivere nel file originale.. facendolo manualmente poi il file viene cariicato correttamente…mi potresti far in modo che lo faccia in automatico?

    Dim zipPath As String = F
            Dim extractPath As String = "C:\Zip_Extract"
    
            ' Estrarre l'archivio ZIP nella directory specificata
            ZipFile.ExtractToDirectory(zipPath, extractPath)
    
            ' Path del file project.properties all'interno dell'archivio ZIP
            Dim propertiesPath As String = Path.Combine(extractPath, "youngandroidproject", "project.properties")
    
            ' Verificare se il file project.properties esiste
            If File.Exists(propertiesPath) Then
                ' Leggere tutte le righe dal file
                Dim lines As List(Of String) = File.ReadAllLines(propertiesPath).ToList()
    
                ' Rimuovere la linea che inizia con "project"
                lines.RemoveAll(Function(line) line.StartsWith("project"))
    
                ' Sovrascrivere il file con le righe modificate
                File.WriteAllLines(propertiesPath, lines)
            Else
    
                MessageBox.Show("Il file project.properties non esiste.",
                          "AVVISO", MessageBoxButtons.OK, MessageBoxIcon.Question)
            End If
            
            
  • Re: VB_NET_Modificare file Zip

    Prova nuovamente il codice che ti avevo proposto prima con qualche modifica per non usare il newline di windows ma quello di unix

                   Using zippedFile As ZipArchive = ZipFile.Open(F, ZipArchiveMode.Update)
                Dim entryPath As String = "youngandroidproject/project.properties"
    
                Dim entry As ZipArchiveEntry = zippedFile.GetEntry(entryPath)
                Dim l As New List(Of String)
                Using reader As StreamReader = New StreamReader(entry.Open())
                    Do
                        l.Add(reader.ReadLine)
                    Loop Until reader.EndOfStream
                End Using
    
    
                entry.Delete()
    
                entry = zippedFile.CreateEntry(entryPath)
                Using writer As StreamWriter = New StreamWriter(entry.Open())
                    For Each s As String In l
                        If Not s.StartsWith("project") Then
                            writer.Write(s + Environment.NewLine.Substring(1, 1))
                        End If
                    Next
                End Using
            End Using
  • Re: VB_NET_Modificare file Zip

    No purtroppo non funziona grazie per il tuo tempo dedicatomi…proverò un altra soluzione grazie ancora…

  • Re: VB_NET_Modificare file Zip

    Così i file sono uguali, deve funzionare

  • Re: VB_NET_Modificare file Zip

    08/07/2023 - oregon ha scritto:


    Prova nuovamente il codice che ti avevo proposto prima con qualche modifica per non usare il newline di windows ma quello di unix

    Io così avevo provato, ma restava la coda del file scrivendo sullo stesso Stream (entry.Open).

    Credevo di aver risolto troncando, ma continuava a non essere digerito dove fa l'upload.

    Sub Pulisci_File(ByVal F As String)
            Using zippedFile As ZipArchive = ZipFile.Open(F, ZipArchiveMode.Update)
                Dim entryPath As String = "youngandroidproject/project.properties"
                Dim ntry As ZipArchiveEntry = zippedFile.GetEntry(entryPath)
                Dim sr As New StreamReader(ntry.Open, Encoding.UTF8)
                Dim l As New List(Of String)
                Do
                    l.Add(sr.ReadLine)
                Loop Until sr.EndOfStream
                sr.Close()
    
                l.RemoveAt(l.Count - 2)
    
                Dim sw As New StreamWriter(ntry.Open, Encoding.UTF8)
                Dim lunghezza As Long
    
                For Each s As String In l
                    sw.WriteLine(s)
                    lunghezza += s.Length
                Next
                sw.Close()
                ntry.Open().SetLength(lunghezza) 'Tronco lo stream
            End Using
        End Sub
  • Re: VB_NET_Modificare file Zip

    La writeline scrive il \r\n di windows Ma nell'originale c'è solo il \n di unix

    Quindi ho eliminato la writeline e sostituito con la write e il \n 

    Inoltre ho preferito leggere il file, cancellarlo e ricrearlo per riscriverlo correttamente.

    Il risultato finale è corretto ma mi pare strano che non venga validato

  • Re: VB_NET_Modificare file Zip

    Una ulteriore prova può essere quella di riscrivere il file (senza Encoding UTF8) e sostituendo solo il primo carattere nella riga da eliminare con un #

    Ovvero

            Using zippedFile As ZipArchive = ZipFile.Open(F, ZipArchiveMode.Update)
               Dim entryPath As String = "youngandroidproject/project.properties"
               Dim entry As ZipArchiveEntry = zippedFile.GetEntry(entryPath)
               Dim sr As New StreamReader(entry.Open)
               Dim l As New List(Of String)
               Do
                   l.Add(sr.ReadLine)
               Loop Until sr.EndOfStream
               sr.Close()
               Dim sw As New StreamWriter(entry.Open)
               For Each s As String In l
                   If s.StartsWith("projectColors") Then
                       s = "#" + s.Substring(1)
                   End If
                   sw.Write(s + Environment.NewLine.Substring(1, 1))
               Next
               sw.Close()
           End Using

    In questo caso i due file di testo saranno perfettamente uguali a meno del solo carattere sostituito.

    Il file zip sarà più grande di 1 solo carattere forse a causa dell'algoritmo dello zip

    Se viene effettuato il controllo sulla lunghezza del file zip, ovviamente non andrà. Altrimenti non vedo perché non debba essere validato. 

  • Re: VB_NET_Modificare file Zip

    08/07/2023 - Sgrubak ha scritto:


    08/07/2023 - oregon ha scritto:


    Prova nuovamente il codice che ti avevo proposto prima con qualche modifica per non usare il newline di windows ma quello di unix

    Io così avevo provato, ma restava la coda del file scrivendo sullo stesso Stream (entry.Open).

    Credevo di aver risolto troncando, ma continuava a non essere digerito dove fa l'upload.

    Sub Pulisci_File(ByVal F As String)
            Using zippedFile As ZipArchive = ZipFile.Open(F, ZipArchiveMode.Update)
                Dim entryPath As String = "youngandroidproject/project.properties"
                Dim ntry As ZipArchiveEntry = zippedFile.GetEntry(entryPath)
                Dim sr As New StreamReader(ntry.Open, Encoding.UTF8)
                Dim l As New List(Of String)
                Do
                    l.Add(sr.ReadLine)
                Loop Until sr.EndOfStream
                sr.Close()
    
                l.RemoveAt(l.Count - 2)
    
                Dim sw As New StreamWriter(ntry.Open, Encoding.UTF8)
                Dim lunghezza As Long
    
                For Each s As String In l
                    sw.WriteLine(s)
                    lunghezza += s.Length
                Next
                sw.Close()
                ntry.Open().SetLength(lunghezza) 'Tronco lo stream
            End Using
        End Sub

    il risultato e che rimangono tre lettere alla fine…..

  • Re: VB_NET_Modificare file Zip

    Mi dispiace ma anche nel secondo caso inserendo il( # ) non funziona il server non lo digerisce il file…. da errore…

    ti ringrazio moltissimo ma faro a mano come ho sempre fatto….

  • Re: VB_NET_Modificare file Zip

    Evidentemente viene fatto qualche controllo particolare sul file. Se capisci quale si può rimediare.

Devi accedere o registrarti per scrivere nel forum
26 risposte