Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Aiuto per copiare un'intera cartella in un file zip
Forum - Visual Basic 6 - Aiuto per copiare un'intera cartella in un file zip

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
TremalJack (Normal User)
Newbie


Messaggi: 8
Iscritto: 15/06/2008

Segnala al moderatore
Postato alle 5:35
Domenica, 15/06/2008
Ciao a tutti sono nuovo e chiedo un po d'aiuto in quanto ho dei problemini, arrivo subito al dunque...

Io sto creando un programma di backupaggio... e ho la necessità di far creare un fil zip vuoto nella cartella selezionata e di conseguenza far copiare la cartella selezionata nel archivio zip...

Il tutto è composto cosi.... txtDirectory si riferisce alla cartella selezionata per il backupaggio, txtDirectory2 si riferisce alla directory di salvataggio del file zip... quando premo il tasto "salva"

Private Sub Salva_Click()
strDate = Format(Now, " dd-mmm-yy h-mm-ss")
    FileNameZip = DefPath & "MyFilesZip " & strDate & ".zip"

    Set oApp = CreateObject("Shell.Application")
    
    'Create empty Zip File
     NewZip (FileNameZip)
        FolderName = txtDirectory
        If Right(FolderName, 1) <> "\" Then
            FolderName = FolderName & "\"
        End If
        
        'Copy the files to the compressed folder
         CopyFile FolderName, FileNameZip, 0
End Sub

In un modulo ho scritto il sub per la creazione del zip:

Sub NewZip(sPath)
    On Error Resume Next
    If Len(Dir(sPath)) > 0 Then Kill sPath
    Open sPath For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
End Sub

e per copiare i file ho dichiarato il CopyFile:
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Nulla mi da errori ma nel momento di salvataggio mi crea il file zip ma non mi copia i file al suo interno.... cercando su internet ho trovato quest'altro metodo:

oApp.Namespace(FileNameZip).CopyHere oApp.Namespace(FolderName).items

che però non riesco a far funzionare... nonostante oApp è dichiarato come Object e settato come: ("shell.aplication") mi dice che c'è errore sul blocco with... allora lo imposto cosi:

with object
oApp.Namespace(FileNameZip).CopyHere oApp.Namespace(FolderName).items
End with

però mi da ancora errore... non so più dove sbattere la testa, se gentilmente qualcuno mi da un'aiutino gli sarei mooolto grato :(:d

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 9:10
Domenica, 15/06/2008
Fammi capire da dove hai preso quell'assurdo codice per creare un file zip ...

Ci credo che non funziona ...

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 10:48
Domenica, 15/06/2008
anch'io stavo facendo un programma di back up e anche io avevo questo problema ma dopo una ricerca su google ho risolto :D
Guarda qui:
In un modulo:
Codice sorgente - presumibilmente VB.NET

  1. '''''''''''''''''''''''''''''''''''OPZIONI_ZIP''''''''''''''''''''''''''''''''''''''''''''
  2. '[variabili]
  3. Public strScriptFullName, strCurrentPath, strZipFilePath, strAddFilePath
  4.  
  5. '[Crea un file zip vuoto]
  6. Function CreateEmptyZip(strZipFilePath)
  7.   On Error Resume Next
  8.  
  9.   'Apertura file in scrittura
  10.   Dim objFso, objFile
  11.   Const ForWriting = 2
  12.   Set objFso = CreateObject("Scripting.FileSystemObject")
  13.   Set objFile = objFso.OpenTextFile(strZipFilePath, ForWriting, True)
  14.  
  15.   If Err = 0 Then
  16.     objFile.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0)
  17.   End If
  18.  
  19.   If Err = 0 Then
  20.     objFile.Close
  21.   End If
  22.  
  23.   Set objFso = Nothing
  24.   Set objFile = Nothing
  25.  
  26.   If Err = 0 Then
  27.     CreateEmptyZip = True
  28.   Else
  29.     Err.Clear
  30.     CreateEmptyZip = False
  31.   End If
  32. End Function
  33. '[Aggiunge un file al file zip]
  34. Function AddFile2Zip(strZipFilePath, strAddFilePath)
  35.   'On Error Resume Next
  36.  
  37.   Dim objApp, objFolder
  38.   Set objApp = CreateObject("Shell.Application")
  39.   Set objFolder = objApp.NameSpace(strZipFilePath)
  40.  
  41.   If Err = 0 Then
  42.     Call objFolder.CopyHere(strAddFilePath)
  43.  
  44.     'Le opzioni di CopyHere sembrano non avere effetto
  45.     'per operazioni su cartelle compresse
  46.  
  47.     'Pausa per consentire l'avvio del processo di compressione
  48.     'in quanto il processo verrà avviato quando quando il
  49.     'processo dello script verrà messo in idle se il
  50.     'processo dello script termina prima il processo
  51.     'di compressione non viene avviato.
  52.     'Ciò accade perchè CopyHere è asincrona
  53.      'wscript.Sleep 500
  54.   End If
  55.  
  56.   Set objFolder = Nothing
  57.   Set objApp = Nothing
  58.  
  59.   If Err = 0 Then
  60.     AddFile2Zip = True
  61.   Else
  62.     Err.Clear
  63.     AddFile2Zip = False
  64.   End If
  65. End Function



Ecco i due comandi, uno per creare lo zip e uno per aggiungergli dei file:

Codice sorgente - presumibilmente Visual Basic 6

  1. CreateEmptyZip "C:\percorso\file.zip" 'Crea lo zip
  2. Call AddFile2Zip("C:\percorsodovestalozip\file.zip, "C:\percorso dei file o della cartella da ggiungergli") 'aggiunge file/cartelle allo zip



:k:

Ultima modifica effettuata da GrG il 15/06/2008 alle 10:49
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 11:24
Domenica, 15/06/2008
Testo quotato

Postato originariamente da GrG:

:k:



Cosi' va meglio ... e per non usare l'oggetto FileSystemObject la creazione dello zip vuoto la scriverei cosi'

Codice sorgente - presumibilmente VB.NET

  1. Private Type zipHeader
  2.     hd As Long
  3.     zh As String * 18
  4. End Type
  5.  
  6. Function CreateZip(ByVal strZipFilePath As String)
  7.     On Error Resume Next
  8.     Dim fh As Integer
  9.     Dim h As zipHeader
  10.    
  11.     h.hd = &H6054B50
  12.    
  13.     fh = FreeFile
  14.     Open strZipFilePath For Binary As fh
  15.     Put #fh, , h
  16.     Close #fh
  17.    
  18.     CreateZip = (Err = 0)
  19.     Err.Clear
  20. End Function


Ultima modifica effettuata da gantonio il 15/06/2008 alle 11:35
PM Quote
Avatar
TremalJack (Normal User)
Newbie


Messaggi: 8
Iscritto: 15/06/2008

Segnala al moderatore
Postato alle 2:21
Lunedì, 16/06/2008
Testo quotato

Postato originariamente da gantonio:

Fammi capire da dove hai preso quell'assurdo codice per creare un file zip ...

Ci credo che non funziona ...



Quell'assurdo codice funziona intanto xD e l'errore non risiede in quella parte del codice.. comunque.... fatto sta che se anche rifaccio il tutto come dite voi... non mi da errori... però all'apertura dell'archivio zip non trovo nulla... se non sbaglio è per il fatto che il processo di copia verrà effettuato quando lo script sarà in idle... come faccio a non "aspettare"???

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 9:40
Lunedì, 16/06/2008
Testo quotato

Postato originariamente da TremalJack:
Quell'assurdo codice funziona intanto



E chi ha detto che non funziona ... ma resta assurdo perche' non fa altro che scrivere un header in modo costante, senza considerare il fatto che questo header potrebbe cambiare nelle nuove versioni di file ZIP ...

Testo quotato

però all'apertura dell'archivio zip non trovo nulla...



Ho provato e funziona regolarmente ...

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 11:30
Lunedì, 16/06/2008
Anche a me funziona.

PM Quote
Avatar
TremalJack (Normal User)
Newbie


Messaggi: 8
Iscritto: 15/06/2008

Segnala al moderatore
Postato alle 15:56
Lunedì, 16/06/2008
Testo quotato

Postato originariamente da GrG:

Anche a me funziona.



Ragazzi... non per cosa... ma io ho fatto copia ed in colla in un modulo e richiamati con il comando "call" esempio "call AddFile2Zip(FileNameZip, FolderName)" com'è giusto che sia... alla prova del 9 mi da "variabile oggetto o variabile del blocco with non impostata"

ora come io sto impazzendo... perchè ho provato di tutto non è che mi potreste allegare il vostro progetto in cui va in modo tale da vedere che diavolo sbaglio???

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 16:27
Lunedì, 16/06/2008
Testo quotato

Ragazzi... non per cosa...



Non per cosa ma tu fino ad ora hai parlato di file zip vuoto e non di errori ... adesso dici che hai un errore

"variabile oggetto o variabile del blocco with non impostata"

ma non dici in quale linea ...

Con quale sistema operativo lavori?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo