Chi è un po’ pratico di Asp.Net o comunque del FrameWork.Net di Microsoft, sa bene che tra le numerose funzioni per gestire file e cartelle non esiste alcun metodo per copiare una cartella e tutto il suo contenuto in un altro percorso.
Per copiare i file da una cartella ad un’altra con Asp.Net
Questa procedure è piuttosto semplice, creiamo una funzione che copi un file da un percorso di origine a quello di destinazione.
Public Function CopyFile(sourcePath As String, destPath As String) As String
Try
'SE LA CARTELLA DI DESTINAZIONE NON ESISTE
'LA CREIAMO
If Not System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(destPath)) Then
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(destPath))
End If
'ESEGUIAMO LA COPIA DEL FILE
System.IO.File.Copy(sourcePath, destPath)
Return "File copiato"
Catch ex As Exception
Return ex.Message
End Try
End Function
La funzione sopra citata può essere richiamata da un evento “Load” di una pagina .aspx in questo modo:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim src As String = Server.MapPath("~/textfile.txt")
Dim dst As String = Server.MapPath("~/cartella/textfile-copy.txt")
Response.Write(CopyFile(src, dst))
End Sub
Avremo così una copia fisica del File in un altro percorso.
Copiare cartelle da un percorso ad un altro
Qui il discorso è un po’ più complicato anche se relativamente semplice.
Controlliamo la funzione qui sotto riportata:
Public Sub CopyDirectory(sourcePath As String, destPath As String)
Dim sourceDir As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(sourcePath)
Dim destDir As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(destPath)
'se la cartella di origine esiste
If (sourceDir.Exists) Then
'se la cartella di destinazione non esiste la creo
If Not (destDir.Exists) Then
destDir.Create()
End If
'recupero i file nella cartella e li copio nella
'cartella di diestinazione
Dim file As System.IO.FileInfo
For Each file In sourceDir.GetFiles()
file.CopyTo(System.IO.Path.Combine(destDir.FullName, file.Name), True)
Next
'copio le cartelle contenute nella principale
'richiamando ciclicamente questa funzione medesima
Dim dir As System.IO.DirectoryInfo
For Each dir In sourceDir.GetDirectories()
CopyDirectory(dir.FullName, System.IO.Path.Combine(destDir.FullName, dir.Name))
Next
End If
End Sub
Notiamo che la funzione per prima cosa crea la directory di destinazione poi vi copia i file contenuti nella cartella originale. A questo punto richiama se stessa per ogni cartella che trova dentro la principale per eseguire la copia dei files.
Quindi deduciamo che si innesca un meccanismo ciclico per ogni cartella presente dentro la principale, anche se il percorso è notevolmente profondo.
Provate a richiamarla nell’ evento “Load” di una pagina .aspx per verificarne il funzionamento:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim src As String = Server.MapPath("~/nome cartella/")
Dim dst As String = Server.MapPath("~/cartella destinazione/")
Response.Write(CopyDirectory(src, dst))
End Sub
Così abbiamo creato la nostra funzione personalizzata per copiare le cartelle.
Se nelle nostre applicazioni , siamo abituati ad utilizzare spesso lo spazio dei nomi System.IO, questa è una funzione che non possiamo tralasciare.
Saluti al prossimo articolo