Seleccionar y copiar directorios

Hola, me gustaría saber como puedo copiar un directorio entero a otro sitio, o sea, seleccionar el directorio que yo quiera y darle el destino (c:\, a:\ etc..) también. Agradecería que me lo explicarais lo más fácilmente posible ya que estoy empezando en esto del vb y a veces en los ejemplos me pierdo porque no se donde poner el código que dais. Gracias.

1 Respuesta

Respuesta
1
Para poder seleccionar un directorio debes utilizar la función SelecionarCarpeta; llama a
la función con 2 parámetros
- El nombre del formulario
- El mensaje a mostrar
Tendrás que llamarlo 2 veces una para pedir el directorio y otra para el diretorio de destino.
Para copiar un directorio lo más es utilizar la librería SCRUN.DLL. Para agregarla ve al menu
Proyecto - Referencias y agrega la referencia Microsoft Scripting Runtime.
Después debes utilizar la función CopiarDirectorio. La función tiene tres parámetros:
- El directorio de origen
- El directorio de destino
- Sobrescribir (Sobrescribir los ficheros en el directorio de destino).
Por desgracia este método no presenta ningún cuadro ni nada para saber que es lo que esta copiando.
En el caso de que quieras presensentar un cuadro como el de Windows para que muestre un form
que indique que ficheros se están copiando tendrás que utilizar otra función (esta librería tiene
el método copyFile para un solo fichero); si es esto lo que quieres enviame otro E-Mail y te
desarrollare esa rutina.
Para que estas rutinas funcionen debes copiarlas en un modulo y después simplemente llamarlas desde
cualquier formulario o modulo con su nombre y sus parámetros. Ej:
carpeta=SelecionarCarpeta (Form1, "Selecione una carpeta")
Pt:
En el caso de que tengas alguna duda sobre esto o alguna otra pregunta sobre VB o Hardware no
dudes en enviarme o otra pregunta.
Por favor si encuentras algún error en esta rutina o la modificas ruego que me la envíes.
Continua en la segunda respuesta
Segunda Parte
Código:
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Function SelecionarCarpeta(ByVal x As Form, ByVal mensaje$) As String
'Funcion que hace aparecer el cuadro de selecionar carpeta
'en el caso de que se selecione una carpeta devuelve la trayectoria
'completa de dicha carpeta; en el caso de que se pulse cancel devuelve
'
'Declares:
'Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
'Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
'Type BROWSEINFO
' hOwner As Long
' pidlRoot As Long
' pszDisplayName As String
' lpszTitle As String
' ulFlags As Long
' lpfn As Long
' lParam As Long
' iImage As Long
'End Type
'Parametros de entrada:
'x: El formulario de donde se va arrancar la ventana
'mensaje: El titulo que se mostrara cuando se pida un directorio
'Parametros de salida:
'Devuelve la carpeta selecionada o ""
Dim bi As BROWSEINFO 'declare the needed variables
Dim rtn&, pidl&, path$, pos%, t As Long, SpecIn As String
Dim specout As String
bi.hOwner = x.hWnd 'centres the dialog on the screen
bi.lpszTitle = mensaje 'set the title text
bi.ulFlags = BIF_RETURNONLYFSDIRS 'the type of folder(s) to return
pidl& = SHBrowseForFolder(bi) 'show the dialog box
path = Space(512) 'sets the maximum characters
t = SHGetPathFromIDList(ByVal pidl&, ByVal path) 'gets the selected path
pos% = InStr(path$, Chr$(0)) 'extracts the path from the string
SpecIn = Left(path$, pos - 1) 'sets the extracted path to SpecIn
If Right$(SpecIn, 1) = "\" Then 'makes sure that "\" is at the end of the path
specout = SpecIn 'if so then, do nothing
Else 'otherwise
specout = SpecIn + "\" 'add the "\" to the end of the path
End If
SelecionarCarpeta = specout
End Function
Sub copiarDirectorio(ByVal origen$, ByVal destino$, swSobrescribir As Boolean)
'Funcion que copia el directorio de origen y sus subdirectorios al directorio
'destino
'Necesita una referencia a la libreria SCRUN.DLL
Dim ficheros As New Scripting.FileSystemObject
ficheros.CopyFolder origen, destino, swSobrescribir
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas