TremalJack (Normal User)
Newbie
Messaggi: 8
Iscritto: 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
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Fammi capire da dove hai preso quell'assurdo codice per creare un file zip ...
Ci credo che non funziona ...
|
|
GrG (Member)
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
|
anch'io stavo facendo un programma di back up e anche io avevo questo problema ma dopo una ricerca su google ho risolto
Guarda qui:
In un modulo:
Codice sorgente - presumibilmente VB.NET |
'''''''''''''''''''''''''''''''''''OPZIONI_ZIP'''''''''''''''''''''''''''''''''''''''''''' '[variabili] Public strScriptFullName, strCurrentPath, strZipFilePath, strAddFilePath '[Crea un file zip vuoto] Function CreateEmptyZip(strZipFilePath) On Error Resume Next 'Apertura file in scrittura Dim objFso, objFile Const ForWriting = 2 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile(strZipFilePath, ForWriting, True) objFile.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0) End If objFile.Close End If Set objFso = Nothing Set objFile = Nothing CreateEmptyZip = True Else CreateEmptyZip = False End If End Function '[Aggiunge un file al file zip] Function AddFile2Zip(strZipFilePath, strAddFilePath) 'On Error Resume Next Dim objApp, objFolder Set objApp = CreateObject("Shell.Application") Set objFolder = objApp.NameSpace(strZipFilePath) Call objFolder.CopyHere(strAddFilePath) 'Le opzioni di CopyHere sembrano non avere effetto 'per operazioni su cartelle compresse 'Pausa per consentire l'avvio del processo di compressione 'in quanto il processo verrà avviato quando quando il 'processo dello script verrà messo in idle se il 'processo dello script termina prima il processo 'di compressione non viene avviato. 'Ciò accade perchè CopyHere è asincrona 'wscript.Sleep 500 End If Set objFolder = Nothing Set objApp = Nothing AddFile2Zip = True Else AddFile2Zip = False End If End Function
|
Ecco i due comandi, uno per creare lo zip e uno per aggiungergli dei file:
Codice sorgente - presumibilmente Visual Basic 6 |
CreateEmptyZip "C:\percorso\file.zip" 'Crea lo zip
Call AddFile2Zip("C:\percorsodovestalozip\file.zip, "C:\percorso dei file o della cartella da ggiungergli") 'aggiunge file/cartelle allo zip
|
Ultima modifica effettuata da GrG il 15/06/2008 alle 10:49 |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Postato originariamente da GrG:
|
Cosi' va meglio ... e per non usare l'oggetto FileSystemObject la creazione dello zip vuoto la scriverei cosi'
Codice sorgente - presumibilmente VB.NET |
Private Type zipHeader hd As Long zh As String * 18 End Type Function CreateZip(ByVal strZipFilePath As String) On Error Resume Next Dim fh As Integer Dim h As zipHeader h.hd = &H6054B50 fh = FreeFile Open strZipFilePath For Binary As fh Put #fh, , h Close #fh End Function
|
Ultima modifica effettuata da gantonio il 15/06/2008 alle 11:35 |
|
TremalJack (Normal User)
Newbie
Messaggi: 8
Iscritto: 15/06/2008
|
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"??? |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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 ...
però all'apertura dell'archivio zip non trovo nulla... |
Ho provato e funziona regolarmente ... |
|
GrG (Member)
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
|
Anche a me funziona.
|
|
TremalJack (Normal User)
Newbie
Messaggi: 8
Iscritto: 15/06/2008
|
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??? |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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?
|
|