Reemplazar ficheros

KOMA
10 de Febrero del 2006
Hola muy buenas , haber si me pueden ayudar que estoy atoyaó.
Necesito saber como se hace desde codigo lo siguiente:
Tengo una jerarquía de carpetas en windows y ficheros pdf dentro de las carpetas....quiero borrar todos los ficheros de las carpetas que contengan el fichero prueba.pdf....es decir...dentro de la jerarquía existen varias carpetas que tienen 5 archivos pdf..uno de los 5 es el prueba.pdf ...pues quiero borrar los otros cuatro...

mvallejos
10 de Febrero del 2006
Todo lo que sea barrido de jerarquías de carpetas, debe resolverse con una subrutina recursiva, es decir, que se llame a si misma cada vez que en una carpeta, existan subcarpetas.
El problema de esto, es que la función Dir (la que se usa para listar o ver si un archivo o carpeta existe) no funciona dentro de una recursividad, por lo que vas a tener que valerte de una serie de declaraciones API que sirven muy bien para barrer estructuras de directorio.

-- Tipos de datos y constantes

Public Const MAX_PATH = 260

Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

-- Funciones APis para buscar entradas en la FAT

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long


FindFirstFile busca la primer entrada en la FAT a partir de un directorio inicial y un patron (Ej C:\Windows\*.*).

Si FindFirstFile encuentra algo, se sigue el barrido en un bucle con FindNextFile.

FindFirstFile y FindNextFile trabajan con una variable de tipo WIN32_FIND_DATA, uno de los atributos de ese registro es dwFileAttributes, que cuando es 16, se trata de una carpeta. Con esto, cuando barres una carpeta y encuentras una subcarpeta, la subrutina debe llamarse a sí misma para comenzar el barrido de la subcarpeta encontrada.

Espero que te sirva como punto de partida.

Saludos