hola primero que nada un saludo a toda esta gran comunidad... quisiera saber si me podrian ayudar...
No se si se podria colocar un timer... con la funcion kill para que elimine cierto archivo cada x segundos... que se encuentre por ejemplo .. en :
C:\archivo.txt
y que no cause error cuando no lo encuentre..
porque si uso la funcion kill... solo lo elimina una vez.. pero quiero que elimine tal archivo cada vez que lo vea en esa ruta...
o en todo caso... se podria hacer ? que "archivo.txt" no tenga permisos de escribir ni ejecutarse desde vb?...
gracias..
Lo ideal, esque utilizes fileexists y si existe el archivo eliminarlo, aunque hay la forma cutre....
on error resume next
kill "loquequieras"
...
Saludos.
Citaron error resume next
kill "loquequieras"
...
si pero con esa funcion solo lo puedo eliminar "una" vez... como podria hacer.. para que al hacer click... o check .. elimine tal archivo varias veces..o sea aunq vuelva a colocar por ejemplo ese archivo en esa ruta mientras ande activado ... lo "elimine" ubicado en :
CitarC:\archivo.txt
no se si se podria hacer con un timer.. o algo similar... no se si me dejo a entender..
gracias igual...
para salir de paso usa un Timer, aunque hay una posibilidad de poder detectar cuando se crea un archivo en una carepta sin Timer, con Apis que monitorean...y si existe lo borras...en el api-guide hay un ejemplo...
saludos.
Citarpara salir de paso usa un Timer, aunque hay una posibilidad de poder detectar cuando se crea un archivo en una carepta sin Timer, con Apis que monitorean...y si existe lo borras...en el api-guide hay un ejemplo...
saludos.
me interesa mucho eso es justo lo que ando buscando... podreis citar.. el ejemplo o decirme el nombre , disculpa es que no se donde buscarlo.... gracias
Algo sencillo, con un Timer en el formulario:
Private Sub Timer1_Timer()
On Error Resume Next
Kill Environ("HOMEDRIVE") & "\Archivo.txt"
End Sub
Pon el Timer con el intervalo de tiempo que quieras que pase antes de comprobar si existe y eliminar el archivo.
Saludos ;)
si yo decia lo mismo, pero sin timer...cuando detecte que existe que lo elimine, yo hice un programa asi que detecta cuando existe o se cambia un archivo...esperame que edito el post y te paso un ejemplo:
necesitas 2 botones, uno para emepezar y el otro para parar el monitoreo de la carpeta..
Option Explicit
Private Const TIME_OUT = &H102
Private Const FILE_SHARE_DELETE = &H4
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const FILE_ALL_ACCESS = &H1FF
Private Const FILE_LIST_DIRECTORY = &H1
Private Const OPEN_EXISTING = &H3
Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Private Const FILE_FLAG_OVERLAPPED = &H40000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Enum FILE_NOTIFY_CHANGE
FILE_NOTIFY_CHANGE_FILE_NAME = &H1
FILE_NOTIFY_CHANGE_DIR_NAME = &H2
FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4
FILE_NOTIFY_CHANGE_SIZE = &H8
FILE_NOTIFY_CHANGE_LAST_WRITE = &H10
FILE_NOTIFY_CHANGE_LAST_ACCESS = &H20
FILE_NOTIFY_CHANGE_CREATION = &H40
FILE_NOTIFY_CHANGE_SECURITY = &H100
End Enum
Private Enum FILE_ACTION
FILE_ACTION_ADDED = &H1
FILE_ACTION_REMOVED = &H2
FILE_ACTION_MODIFIED = &H3
FILE_ACTION_RENAMED_OLD_NAME = &H4
FILE_ACTION_RENAMED_NEW_NAME = &H5
End Enum
Private Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Private Type FILE_NOTIFY_INFORMATION
dwNextEntryOffset As Long
dwAction As FILE_ACTION
dwFileNameLength As Long
wcFileName(1024 - 1) As Byte 'Buffer de 1024 bytes
End Type
Private Declare Function ResetEvent Lib "kernel32" (ByVal hEvent As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (ByVal lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Private Declare Function GetOverlappedResult Lib "kernel32" (ByVal hFile As Long, lpOverlapped As OVERLAPPED, lpNumberOfBytesTransferred As Long, ByVal bWait As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadDirectoryChangesW Lib "kernel32.dll" (ByVal hDirectory As Long, ByVal lpBuffer As Long, ByVal nBufferLength As Long, ByVal bWatchSubtree As Boolean, ByVal dwNotifyFilter As FILE_NOTIFY_CHANGE, lpBytesReturned As Long, ByVal lpOverlapped As Long, ByVal lpCompletionRoutine As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
'Variable para el monitoreo
Dim fstop As Boolean
Private Sub Command1_Click()
Dim hDir As Long 'Handle del Directorio
Dim hEvent As Long 'Handle del Evento
fstop = False
'aca pones la carpeta a monitorear y le pasa todos los flags
hDir = CreateFile("C:\", FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS Or FILE_FLAG_OVERLAPPED, 0&)
'Crea el evento
hEvent = CreateEvent(0&, True, True, "DirEvent")
Dim oLap As OVERLAPPED
With oLap
.hEvent = hEvent
End With
Dim buf(0 To 1024 * 5 - 1) As Byte
'para obtener la info del archivo
Dim dirBuf As FILE_NOTIFY_INFORMATION
Dim nUsed As Long
Call ReadDirectoryChangesW(hDir, VarPtr(buf(0)), UBound(buf) + 1, True, FILE_NOTIFY_CHANGE_FILE_NAME, nUsed, VarPtr(oLap), 0&)
Dim bstr As String 'para el nombre del archivo
Dim pos As Long 'para la ruta
Dim ret As Long
Do
pos = 0
'esperamos un evento
ret = WaitForSingleObject(hEvent, 100)
If ret <> TIME_OUT Then
CopyMemory VarPtr(dirBuf), VarPtr(buf(pos)), Len(dirBuf)
Debug.Print dirBuf.dwFileNameLength & " " & dirBuf.dwNextEntryOffset
Select Case dirBuf.dwAction
Case FILE_ACTION_ADDED:
Debug.Print "Creaste ";
Case FILE_ACTION_MODIFIED:
Debug.Print "Modificaste ";
Case FILE_ACTION_REMOVED:
Debug.Print "Borraste ";
Case FILE_ACTION_RENAMED_NEW_NAME:
Debug.Print "Renombraste a ";
Case FILE_ACTION.FILE_ACTION_RENAMED_OLD_NAME:
Debug.Print "Nombre Anterior ";
End Select
bstr = dirBuf.wcFileName
bstr = Left(bstr, dirBuf.dwFileNameLength / 2)
Debug.Print bstr
While dirBuf.dwNextEntryOffset <> 0
pos = pos + dirBuf.dwNextEntryOffset
CopyMemory VarPtr(dirBuf), VarPtr(buf(pos)), Len(dirBuf)
Debug.Print dirBuf.dwFileNameLength & " " & dirBuf.dwNextEntryOffset
Select Case dirBuf.dwAction
Case FILE_ACTION_ADDED:
Debug.Print "Creaste ";
Case FILE_ACTION_MODIFIED:
Debug.Print "Modificaste ";
Case FILE_ACTION_REMOVED:
Debug.Print "Borraste ";
Case FILE_ACTION_RENAMED_NEW_NAME:
Debug.Print "Renombraste a ";
Case FILE_ACTION.FILE_ACTION_RENAMED_OLD_NAME:
Debug.Print "Nombre Anterior ";
End Select
bstr = dirBuf.wcFileName
bstr = Left(bstr, dirBuf.dwFileNameLength / 2)
Debug.Print bstr
Wend
'reseteamos y volvemos a empezar
ResetEvent hEvent
Call ReadDirectoryChangesW(hDir, VarPtr(buf(0)), UBound(buf) + 1, True, FILE_NOTIFY_CHANGE_FILE_NAME, nUsed, VarPtr(oLap), 0&)
End If
DoEvents
Loop While Not fstop
'Cerramos los Handles
CloseHandle hEvent
CloseHandle hDir
End Sub
Private Sub Command2_Click()
'paramos el monitoreo
fstop = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
'empezamos el monitoreo
fstop = True
End Sub
saludos.
seba123neo.. en esa linea:
CitarhDir = CreateFile("C:\", FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE
pondria ? C:\archivo.txt o estoy equivocado... si es asi hazmelo saber gracias...por el gran codigo
Hola, lo que te indica seba está perfecto, pero con la funcion Dir en un timer (5000) no es suficiente ?
If Dir("C:\archivo.txt") <> "" Then Kill "C:\archivo.txt"
Saludos
gracias Dessa.. tu ayuda me funciono perfecto..... igual gracias a seba123neo pueden cerrar el tema .. si es que se puede ::)
Para eso estamos, pero es de destacar que Seba siempre aporta codes y de los buenos.
si Seba va para "Jefe del foro", lo votamos, saludos