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
1
Anónimo
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