PDA

View Full Version : Selez. Cartella e Salvare file in *7z


brubaker
14-10-2014, 22:51
Salve Ragazzi, ero intenzionato nel fare un progammino in VB.net, per comprimere dei file per backup in 7z o altro.
Dato che sto alle prime armi con il VB, chiedo a voi di integrare questo problemino...ho visto un po' in giro ma non ho trovato nulla.:muro: :muro:
Vorrei Aprire la cartella da comprimere....Visualizzando il percorso nel Text box, salvare il file in uno specificato percorso,sempre visualizzato nel text box, e comprimere con il comando...unica cosa funzionante...:stordita:

Posto un immagine per rendere l'idea.Grazie.!!!!

http://i58.tinypic.com/2motcnm.png

tomminno
15-10-2014, 10:30
FolderBrowserDialog ha la proprietà SelectedPath
OpenFileDialog ha la proprietà FileName

Una semplice ricerca sulla documentazione online avrebbe risolto i tuoi problemi :D

brubaker
15-10-2014, 11:34
FolderBrowserDialog ha la proprietà SelectedPath
OpenFileDialog ha la proprietà FileName

Una semplice ricerca sulla documentazione online avrebbe risolto i tuoi problemi :D

?:confused: :muro: ? Non va'.

tomminno
15-10-2014, 13:27
?:confused: :muro: ? Non va'.

Cosa non va?
Forse perchè non ti salvi i valori su delle variabili da utilizzare quando richiami il metodo Shell?

brubaker
15-10-2014, 16:25
Cosa non va?
Forse perchè non ti salvi i valori su delle variabili da utilizzare quando richiami il metodo Shell?

Caro tomminno, non ho avuto la fortuna e la possibilità di studiare queste cose all'università, cerco di essere un autodidatta, per me quello che dici è arabo, dato che il mondo della progammazione mi piace cerco di imparare il piu' possibile chiedendo aiuto, quando si puo', quindi se faresti l'esempio, invece di continuare a fare altre domande su quali righe di comando mancano, sui valori e variabile non richiamate, te ne sarei grato..GRAZIE!;)

brubaker
16-10-2014, 11:27
Un altro Professore Scomparso !!!!!:O Roba da matti in questa sezione del Forum...Mha.:doh:

tomminno
17-10-2014, 07:59
Un altro Professore Scomparso !!!!!:O Roba da matti in questa sezione del Forum...Mha.:doh:

Cioè te non sai nemmeno come si usano le variabili e hai il coraggio di criticare?

Devi salvarti path di origine e di destinazione su delle variabili di istanza della tua classe così che le puoi usarle anche in altri metodi.

brubaker
17-10-2014, 08:44
Cioè te non sai nemmeno come si usano le variabili e hai il coraggio di criticare?

Devi salvarti path di origine e di destinazione su delle variabili di istanza della tua classe così che le puoi usarle anche in altri metodi.

Ma secondo te' se sapevo salvarmi le path di origine e di destinazione su delle variabili di istanza..e bla bla bla..stavo qui a chiedere aiuto????:doh: :doh:
In questo momento mi viene il dubbio..io non ne sono capace , perche' non ho studiato ste cose..ma tu che sai tutte queste teorie da applicare per far funzionare il metodo...saresti anche in grado di farmi sto cavolo di esempio e farmi funzionare il metodo..o vogliamo continuare a fare il professore e lo studente!!!????:confused: :rolleyes: :mbe:

tomminno
17-10-2014, 15:38
Dim sourceDir as String
Dim zipFile as String

...
sourceDir = fld.SelectedPath
...
zipFile = SaveFileDialog1.FileName
...
...Shell(String.Format("...{0} {1}", zipFile, sourceDir))


Ma è difficile andare avanti senza conoscere le basi della programmazione e soprattutto senza avere la voglia di studiare. Chiedere di avere la pappa pronta è il peggior modo possibile per imparare.

brubaker
17-10-2014, 17:15
Mhaaa che'..funziona sempre e solo in manuale....non mi comprime la cartella selezionata..e' logicamente vuoto il file di uscita....
per me il problema sta qua'.."zipFile".... dato che uso il codice sorgente 7z.exe...:mad: :confused: :mbe:

Public Class Form1
Dim sourceDir As String
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Using fld As New FolderBrowserDialog()
If fld.ShowDialog() = Windows.Forms.DialogResult.OK _
Then
MessageBox.Show("Selected" & fld.SelectedPath)
TextBox1.Text = fld.SelectedPath
sourceDir = fld.SelectedPath
End If
End Using
End Sub

Dim zipFile As String
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
SaveFileDialog1.Filter = "7z Files (*.7z*)|*.7z"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK _
Then
My.Computer.FileSystem.WriteAllText (SaveFileDialog1.FileName, "*.7z", True)
MessageBox.Show("Selected" & SaveFileDialog1.FileName)
TextBox2.Text = SaveFileDialog1.FileName
zipFile = SaveFileDialog1.FileName
End If
End Sub


Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim id As Integer = Shell(String.Format("C:\POPO\InstallFiles\7z.exe a -t7z -m9=LZMA2 -aoa {0} {1}", zipFile, sourceDir))
Console.WriteLine(id)

End Sub

End Class

tomminno
17-10-2014, 19:20
Ma sei sicuro che il comando che esegui sia corretto? Se prendi la stringa e la esegui all'interno della shell dei comandi (cmd.exe) funziona?
Infine come lo esegui? Magari c'è qualche problema nel metodo Shell.

brubaker
17-10-2014, 20:14
In manuale funziona...:rolleyes:
Dim id As Integer = Shell(String.Format("C:\POPO\InstallFiles\arc.exe a -ep1 -r -ed -lc512 -ld1600m -mt1 -w./ -msrep+delta+lzma:a1:mfbt4:d158m:fb273:mc1000:lc8 C:\POPO\Setup.bin C:\POPO\PIPPO", zipFile, sourceDir))
Non ho capito perchè non dovrebbe funzionare con il metodo che hai postato tu, sicuramente funzionante!!!
Dim id As Integer = Shell(String.Format("C:\POPO\InstallFiles\7z.exe a -t7z -m9=LZMA2 -aoa {1} {0} ", zipFile, sourceDir))
Gia' Provato..aperto CMD copia incolla di "C:\POPO\InstallFiles\7z.exe a -t7z -m9=LZMA2 -aoa C:\POPO\Data.7z C:\POPO\PIPPO" Funziona alla perfezione assoluta.

tomminno
18-10-2014, 01:19
Domanda stupida, ma hai provato in debug a vedere che stringa viene fuori?
Nell'ultimo codice che hai postato hai invertito i segnaposto dovrebbe darti errore. Comunque prova il debug di visual studio, così capisci cosa sta succedendo.

brubaker
18-10-2014, 08:37
Nell'ultimo codice postato non mi da nessun errore...provato anche ad invertire ....{1} {0}.. avvio il codice...seleziono la cartella....salvo il (nome)file in una posizione qualsiasi....ZIPPO...per una frazione di secondo in basso mi esce la schermata dos...come se funzionasse...ma penso che richiami solo il source 7z.exe..poi basta.:muro: :muro: :muro:

brubaker
18-10-2014, 10:01
Stringa esatta "{0} {0}", sourceDir, zipFile))" Funziona...:D
Adesso prima di chiudere vorrei capire...data l'ignoranza il perchè...funziona {0} {0}... e con "{1} {0}"..."{0} {1}"...."{2} {1}"...."{1} {2}"..etc non funziona o mo dava errore..il concetto dei segna posti qual'eee????:stordita:

tomminno
18-10-2014, 12:29
Stringa esatta "{0} {0}", sourceDir, zipFile))" Funziona...:D
Adesso prima di chiudere vorrei capire...data l'ignoranza il perchè...funziona {0} {0}... e con "{1} {0}"..."{0} {1}"...."{2} {1}"...."{1} {2}"..etc non funziona o mo dava errore..il concetto dei segna posti qual'eee????:stordita:

{0} indica che deve essere sostituito dal primo parametro passato {1} dal secondo e così via. I numeri devono essere sempre crescenti e partire da 0, quindi {1} {0} dà errore così come le altre forme indicate. Se indichi un numero di parametri maggiore del numero di dati che passi ottieni errore. Nel caso {0} {0} scrive 2 volte il primo parametro ovvero sourceDir.

Ma hai provato ad eseguire il programma passo passo in debug? È il modo migliore per imparare cosa significa quello che si è scritto e gli effetti che produce.

brubaker
20-10-2014, 11:20
Si lavoro in debug..con "{0} {1}"....."{1} {0}". non mi da nessuno errore, ma non succede nulla, quando avvio l'appl. con ...."{0} {0}" seleziono la cartella da comprimere che si trova sul desktop..seleziono il file d'uscita in data.7z..faccio partire il tutto..comprime la cartella..OK ma non me lo salva in una cartella scelta ..ma nel desktop dove si trova la cartella che ho compresso.
La questione è semplice non riesco a spostare il file compresso in una posizione a scelta ...come se "SaveFileDialog1" non funzionasse a dovere infatti mi crea un il file Data.7z nella cartella scelta, ma di solo 1Kbye danneggiato.

Apro la cartella da comprimere, "FolderBrowserDialog ()" che si seleziona nel "TextBox1"
Si apre automaticamente "SaveFileDialog1" dove salvo il file in uscita in una cartella qualsiasi es "Data.7z"

http://i58.tinypic.com/hve8ol.png

Clicco sul pulsante "SALVA" e con i segnaposto {0} {0} mi salva il file zippato "BKP" sul Desktop e non nella cartella selezionata "Data.7z" che la crea ma solo di 1kb.

http://i59.tinypic.com/v3hxmr.png

Con il segnaposto {0} {1} o {1} {0},non succede nulla nessuno errore..
In poche parole non salva la cartella compressa nel percorso scelto.

Public Class Form1

Dim sourceDir As String
Dim zipFile As String

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Using fld As New FolderBrowserDialog()
If fld.ShowDialog() = Windows.Forms.DialogResult.OK _
Then
MessageBox.Show("Selected" & fld.SelectedPath)
TextBox1.Text = fld.SelectedPath
sourceDir = fld.SelectedPath

End If

SaveFileDialog1.FileName = "Data.7z"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK _
Then
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, "*.7z", True)
MessageBox.Show("Selected" & SaveFileDialog1.FileName)
TextBox2.Text = SaveFileDialog1.FileName
zipFile = SaveFileDialog1.FileName

End If
End Using
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim id As Integer = Shell(String.Format("InstallFiles\7z.exe a -t7z -m9=LZMA2 -aoa {0} {0}", sourceDir, zipFile))
Console.WriteLine(id)

End Sub

End Class
Mi sa che cio' perso tutte le speranze..:muro: anche il VB ha le sue impossibilita'..:mbe: :O

tomminno
20-10-2014, 12:01
Prima di dare le colpe ad un linguaggio di programmazione, hai provato in debug a procedere passo passo? A me sembra che tu stia sbagliando l'ordine dei parametri

brubaker
20-10-2014, 13:42
Ho fatto tutte le prove che dici..qua e' un problema di compilazione, manca qualcosa...ma per chi non ha studiato ste cose..che ci metto le patate.:doh:
il problema è che, seleziona e comprime la cartella, e che non salva il file nella cartella desiderata, gia' il fatto che se faccio partire l'appl. senza selezionare nulla e premo solo su "SAVE" mi parte la linea di comando di 7.z... e mi crea una cartella zippata con dentro il percorso del proggetto "C:\Users\ALEX\Desktop\THE EVIL\pippo\pippo\bin\Debug"..
Vorrei almeno eliminare questo bug, in qualche parametro da inserire nel codice, in modo che se non seleziono nulla,nel tasto Open, logicamente cliccando sul tasto Save, non deve succedere nulla.:rolleyes: :O

tomminno
20-10-2014, 14:07
A me questo codice (7z.exe in $Path) funziona come previsto, comprime sourceDir nel file zipFile specificato, ovviamente il path completo di zipFile deve esistere:


Dim id As Integer = Shell(String.Format("7z.exe a -t7z -m9=LZMA2 -aoa {0} {1}", zipFile, sourceDir))

brubaker
20-10-2014, 15:41
A me questo codice (7z.exe in $Path) funziona come previsto, comprime sourceDir nel file zipFile specificato, ovviamente il path completo di zipFile deve esistere:


Dim id As Integer = Shell(String.Format("7z.exe a -t7z -m9=LZMA2 -aoa {0} {1}", zipFile, sourceDir))


Ovvio che esiste, ma hai compilato il codice con VB e dici che funziona, perchè mi pare strano che a me non funziona...:rolleyes:
A me l'unico modo funzionante..e questo:...{0} {0}", sourceDir, zipFile)) mi comprime la cartella e il file d'uscita nella stessa posizione della cartella Es."Desktop 'Cartella'..>>..Desktop 'Cartella.7z'.." Fine.

tomminno
20-10-2014, 21:23
Ovvio che esiste, ma hai compilato il codice con VB e dici che funziona, perchè mi pare strano che a me non funziona...:rolleyes:
A me l'unico modo funzionante..e questo:...{0} {0}", sourceDir, zipFile)) mi comprime la cartella e il file d'uscita nella stessa posizione della cartella Es."Desktop 'Cartella'..>>..Desktop 'Cartella.7z'.." Fine.

Ho il vago sospetto che tu non abbia ancora provato in debug per capire quello che succede al tuo codice. Continui ad andare a caso.

SaveFileDialog.FileName devi farlo impostare dal controllo grafico, anche perchè in quel caso contiene anche il path selezionato, nel tuo caso contiene solo il nome del file e rende SaveFileDialog totalmente inutile ai fini del funzionamento del programma.

Il comportamento del codice è esattamente quello atteso per il comando che esegui:

7z.exe a -t7z -m9=LZMA2 -aoa c:\folder c:\folder

genera il file c:\folder.7z

brubaker
20-10-2014, 22:09
Esatto tutto quello che tu dici e giusto, perche' esegue il comando 2 volte con 0 0 quindi zippa nella stessa cartella....non capisco perche' non funziona con 0 1(zipfile)..infatti anche se elimino la stringa..l'applicazione funziona lo stesso allo stesso modo, SaveFileDialog.FileName come faccio ad impostarlo dal controllo grafico????????????????????????????:cry: