Visual Basic - Borrar archivo

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Borrar archivo

Publicado por Erick (4 intervenciones) el 03/08/2015 04:22:50
Buenos días.

Necesito borrar archivos, pero el script se detiene cuando encuentra un archivo que está abierto. Algien conoce el código en vbs para saber si el archivo está abierto?

Gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 21
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar archivo

Publicado por Rafael (68 intervenciones) el 03/08/2015 09:18:12
A ver si te sirve esta funcion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Function IsOpened(sFilePath) As Boolean
    'La estrategia de esta funcion es tratar de abrir el archivo en modo Append (Editar)
    'De tal modo que se pueda evaluar su estado, por defecto devolvara FALSE, que significa que NO ESTA ABIERTO.
    'TRUE para cuando el archivo se encuentre ABIERTO
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    IsOpened = False
    Dim oFso: Set oFso = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
 
    Dim nErr: nErr = 0
    Dim sDesc: sDesc = ""
    Dim oFile: Set oFile = oFso.OpenTextFile(sFilePath, ForAppending)
    If Err.Number = 0 Then
        'No ha ocurrido un error por lo que el archivo no esta abierto y se puede operar con el.
        oFile.Close
    Else
        Select Case Err.Number
            Case 70
                ' El archivo esta abierto ha mandado el error esperado
                IsOpened = True
 
            Case Else
                ' 52 - Bad file name or number
                ' 53 - File not found
                ' 76 - Path not found
                IsOpened = True
                nErr = Err.Number
                sDesc = Err.Description
        End Select
    End If
    Set oFile = Nothing
    Set oFso = Nothing
 
    On Error GoTo 0
 
    If nErr Then
        Err.Raise nErr, , sDesc
    End If
End Function

Ya nos contaras saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Borrar archivo

Publicado por Erick (4 intervenciones) el 03/08/2015 21:36:43
Gracias por responder.
Tengo la rutina que borra archivos y se detiene cuando un archivo está abierto, traté de incluir su rutina para que si el archivo está abierto se salte y continúe borrando el resto, pero no me funciona. Ojalá me pueda indicar qué hago mal. tks


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Const FOR_READING = 1
strFolder = "c:\Users\novatec\Documents\Prueba"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
	abierto = False
	IsOpened(objFile.name)
	if not abierto then
		objFile.Delete
	end if
Next
ShowSubFolders(objFolder)
 
Sub ShowSubFolders(objFolder)
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders
	Set colFiles = objSubFolder.Files
	For Each objFile In colFiles
		abierto = False
		IsOpened(objFile.name)
		if abierto = False then
			objFile.Delete
		end if
	Next
	ShowSubFolders(objSubFolder)
Next
End Sub
 
 
Sub IsOpened(sFilePath)
    'La estrategia de esta funcion es tratar de abrir el archivo en modo Append (Editar)
    'De tal modo que se pueda evaluar su estado, por defecto devolvara FALSE, que significa que NO ESTA ABIERTO.
    'TRUE para cuando el archivo se encuentre ABIERTO
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim oFso: Set oFso = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
 
    Dim nErr: nErr = 0
    Dim sDesc: sDesc = ""
    Dim oFile: Set oFile = oFso.OpenTextFile(sFilePath, ForAppending)
    If Err.Number = 0 Then
        'No ha ocurrido un error por lo que el archivo no esta abierto y se puede operar con el.
        oFile.Close
		abierto = False
    Else
        Select Case Err.Number
            Case 70
                ' El archivo esta abierto ha mandado el error esperado
                IsOpened = True
				abierto = True
Wscript.Echo "Abierto:"+sFilePath
            Case Else
                ' 52 - Bad file name or number
                ' 53 - File not found
                ' 76 - Path not found
                IsOpened = True
                nErr = Err.Number
                sDesc = Err.Description
				abierto = True
Wscript.Echo "Abierto:"+sFilePath
        End Select
    End If
    Set oFile = Nothing
    Set oFso = Nothing
    On Error GoTo 0
'    If nErr Then
'        Err.Raise nErr, , sDesc
'    End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar archivo

Publicado por Rafael (68 intervenciones) el 04/08/2015 12:31:27
Jo... es mas que evidente...

Evaluas si el archivo esta abierto pero no lo asignas a la variable...
tienes
1
2
3
abierto = False
	IsOpened(objFile.name)
	if not abierto then

deberias tener algo asi:
1
2
abierto = IsOpened(objFile.name)
	if not abierto then
[/code]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Borrar archivo

Publicado por Erick (4 intervenciones) el 04/08/2015 14:00:06
Estimado, lo intenté pero túbe que quitarlo porque me da el error "No coinciden los tipos: 'IsOpened'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar archivo

Publicado por Rafael (68 intervenciones) el 04/08/2015 14:25:53
Es por que yo te lo doy como FUNCION de tipo Boolean
1
Function IsOpened(sFilePath) As Boolean

Y tu lo pones como SUB
1
Sub IsOpened(sFilePath)

Vaya si sabes la diferencia entre SUB y FUNCTION no???
Pues ahora la puedes intuir una te regresa datos (del tipo que declaras la funcion) la otra NO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Borrar archivo

Publicado por Erick (4 intervenciones) el 04/08/2015 23:27:40
Ya quedó bien y funcionando, muchas gracias tu ayuda y tu tempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar