25 luglio 2011

Copia di cartelle con Asp.net e Visual Basic

Autore: Filippo Amadori

loghi-a-misuraChi è 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



TAG:
CATEGORIE:
 

Post Correlati

Lascia un commento