PDA

View Full Version : [VB NET] Problema con sintassi riga di comando


chico_
16-02-2025, 13:08
Buongiorno a tutti.
In VB NET vorrei creare una procedura per la compressione di un file con gzip da riga di comando.
In una cartella (c:\tmp) ho inserito il file gzip.exe e un file sql (origine.sql).
da cmd.exe ho provato a eseguire il comando:

gzip -c -7 -f -k origine.sql > destinazione.sql.gz
e la copia viene effettuata corretamente.

Facendolo invece con Vb net, con questo codice:

Dim Origine As String = "c:\tmp\origine.sql"
Dim Destinazione As String = "c:\tmp\destinazione.sql.gz"
Dim p0 As New ProcessStartInfo
p0.FileName = "c:\tmp\gzip.exe"
p0.Arguments = " -c -7 -f -k " & Chr(34) & Origine & Chr(34) & " > " & Chr(34) & Destinazione & Chr(34)
Process.Start(p0)


il processo parte (vedo che si apre per un attimo la finesra della shell, ma non mi convince perche' per un attimo vedo scorrere una serie di caratteri come se avessi omesso > destinazione.sql.gz nella shell) ma non viene creato nessun file di destinazione.

ho anche provato a riscrivere la stringa degli argomenti cosi':
p0.Arguments = " -c -7 -f -k " & Chr(34) & Origine & Chr(34) & " -r " & Chr(34) & Destinazione & Chr(34)

(in pratica sostituendo ">" con "-r") ma il risultato non cambia.
Dove sbaglio?

Grazie

Chico

wingman87
26-02-2025, 09:13
Il carattere > viene interpretato dalla shell come redirezione dell'output al file specificato dopo.
Per ottenere la stessa cosa in VB NET devi specificare tramite le proprietà di ProcessStartInfo che vuoi redirigere l'output e poi prendere lo stream e scriverlo dove vuoi.
Vedi l'esempio qui:
https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.redirectstandardoutput?view=net-9.0