Routine di scompattazione di un file Zip con l'utilizzo della dll rilasciata da ICSharpCode (IC#Code), open source, che si chiama SharpZipLib (#ZipLib) scaricabile liberamente QUI
Imports ICSharpCode.SharpZipLib.Zip
......
If File.Exists(fileName) Then
destPath = fileName.Substring(0, fileName.Length - 4)
If Not Directory.Exists(destPath) Then
Directory.CreateDirectory(destPath)
Else
For Each s As String In Directory.GetFiles(destPath)
File.Delete(s)
Next
End If
Dim inStream As New ZipInputStream(File.OpenRead(fileName))
Dim outStream As FileStream
Dim entry As ZipEntry
Dim buff(2047) As Byte
Dim bytes As Integer
Do While True
Try
entry = inStream.GetNextEntry()
If entry Is Nothing Then
Exit Do
End If
If entry.Name.Last() = "/" Then
Directory.CreateDirectory(destPath & "\" & _
entry.Name.Replace("/", "\"))
Else
Try
outStream = File.Create(destPath & _
"\" & entry.Name, 2048)
Do While True
bytes = inStream.Read(buff, 0, 2048)
If bytes = 0 Then
Exit Do
End If
outStream.Write(buff, 0, bytes)
Loop
outStream.Close()
Catch
End Try
End If
Catch ex As ZipException
rtn += ex.Message & vbCrLf
End Try
Loop
inStream.Close()
Else
rtn = "File '" & fileName & "' non trovato."
End If
venerdì 26 settembre 2008
giovedì 18 settembre 2008
Copia ricorsiva di File e Cartelle in VB.Net
Sembra banale, ma a volte la semplice copia dei file e delle sottodirectory contenute in una cartella può mettere in crisi un programmatore, proprio per la sua banalità.
Proprio per evitare questo, posto un esempio di copia ricorsiva.
Private Sub Copia(ByVal PathOrigine As String, _
ByVal PathDestinazione As String)
Dim Files() As String
If PathDestinazione.Chars(PathDestinazione.Length - 1) <>
Path.DirectorySeparatorChar Then
PathDestinazione += Path.DirectorySeparatorChar
End If
If Not Directory.Exists(PathDestinazione) Then
Directory.CreateDirectory(PathDestinazione)
End If
Files = Directory.GetFileSystemEntries(PathOrigine)
Dim Elemento As String
For Each Elemento In Files
'Sotto cartelle
If Directory.Exists(Elemento) Then
Copia(Elemento, PathDestinazione +
Path.GetFileName(Elemento))
' File nella cartella
Else
File.Copy(Elemento, PathDestinazione +
Path.GetFileName(Elemento), True)
End If
Next Elemento
End Sub
Proprio per evitare questo, posto un esempio di copia ricorsiva.
Private Sub Copia(ByVal PathOrigine As String, _
ByVal PathDestinazione As String)
Dim Files() As String
If PathDestinazione.Chars(PathDestinazione.Length - 1) <>
Path.DirectorySeparatorChar Then
PathDestinazione += Path.DirectorySeparatorChar
End If
If Not Directory.Exists(PathDestinazione) Then
Directory.CreateDirectory(PathDestinazione)
End If
Files = Directory.GetFileSystemEntries(PathOrigine)
Dim Elemento As String
For Each Elemento In Files
'Sotto cartelle
If Directory.Exists(Elemento) Then
Copia(Elemento, PathDestinazione +
Path.GetFileName(Elemento))
' File nella cartella
Else
File.Copy(Elemento, PathDestinazione +
Path.GetFileName(Elemento), True)
End If
Next Elemento
End Sub
Iscriviti a:
Post (Atom)