Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error 55 "File already open"

Estas en el tema de Error 55 "File already open" en el foro de Visual Basic clásico en Foros del Web. Estimados amigos: Tengo una aplicación que genera unos archivos txt en una carpeta especifica con informacion de ciertos movimientos realizados, todo funcionaba bien, pero un ...
  #1 (permalink)  
Antiguo 23/06/2008, 11:41
Avatar de ecerpa  
Fecha de Ingreso: mayo-2005
Mensajes: 61
Antigüedad: 19 años
Puntos: 1
Error 55 "File already open"

Estimados amigos:

Tengo una aplicación que genera unos archivos txt en una carpeta especifica con informacion de ciertos movimientos realizados, todo funcionaba bien, pero un cliente me reporto el siguiente error:

Error 55 File already open

He estado investigando pero no encuentro nada que me aclare 100% el problema...ojalá que ustedes me puedan guiar para dar con la solución

Adjunto un ejemplo muy similar (casi identico) al que ocupo en la aplicación.

Cita:

Private Sub Ingresar()

Dim n As Integer
Dim directorio As String
Dim archivoTxt As String
Dim fileIn as String

directorio = "C:\Respaldo"
fileIn = "archivo.txt"

If Dir(directorio, vbDirectory) = "" Then MkDir directorio

n = FreeFile

archivoTxt = directorio & "\" & fileIn

Open archivoTxt For Append As #n

Print #n, "Hola"

Close #n

End Sub
Gracias por vuestra ayuda

ecerpa

Última edición por ecerpa; 23/06/2008 a las 11:45 Razón: Correccion del codigo
  #2 (permalink)  
Antiguo 23/06/2008, 15:17
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Error 55 "File already open"

De acuerdo, mira en sí el error te dije claramente que el archivo que se está intentando abrir ya está abierto. Muy posiblemente en alguna parte del código completo de tu aplicación no cerraste el archivo con Close. Checa las partes de tu código en donde hayas usado la instrucción Open, debe de haber siempre al final su clausula Close #numero.

Otra cosa que puede estar sucediendo, es que otro programa esté leyendo el archivo al momento de ejecutar dichas instrucciones. Por otro lado (lo cual considero poco probable) es que la función FreeFile() te esté devolviendo el número de un archivo ya abierto. Esto último es casi imposible pero puede suceder. Espero haberte sido de ayuda.
__________________
Nunca seas sabio en tu propia opinión.
  #3 (permalink)  
Antiguo 23/06/2008, 16:18
Avatar de ecerpa  
Fecha de Ingreso: mayo-2005
Mensajes: 61
Antigüedad: 19 años
Puntos: 1
Respuesta: Error 55 "File already open"

Estimado, comprendo 100% lo que me planteas, sinembargo esta es la unica parte donde le hago Open y Close al archivo, por lo tanto es imposible que quede abierto (aunque está claro que en informática nada es imposible...jejejeje).

He estado averiguado en internet y encontre algo que me puede ser util pero no se como aplicarlo. Lo siguiente:

Cita:

http://en.allexperts.com/q/Visual-Ba...ing-data-1.htm

"Que el archivo esté abierto (File already open) no quiere decir abierto a la vista, significa que está abierto a la entrada de datos..."
Pero no me quedo muy clara la solución...

Seguiré investigando, si alguien me puede aportar con algo más,será bienvenido

Gracias

ecerpa
  #4 (permalink)  
Antiguo 24/06/2008, 09:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Error 55 "File already open"

Lo más probable es que esté sucediendo lo que te mencionó Jad-Neo.
Para que no suceda esta clase de errores siempre cierra todos los archivos antes de abrir uno nuevo. Así:
Código:
Close
Open Archivo For Input As #1
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 24/06/2008, 10:07
Avatar de ecerpa  
Fecha de Ingreso: mayo-2005
Mensajes: 61
Antigüedad: 19 años
Puntos: 1
Respuesta: Error 55 "File already open"

Cita:
Iniciado por David el Grande Ver Mensaje
Lo más probable es que esté sucediendo lo que te mencionó Jad-Neo.
Para que no suceda esta clase de errores siempre cierra todos los archivos antes de abrir uno nuevo. Así:
Código:
Close
Open Archivo For Input As #1

Me dices que debería quedar asi:


Private Sub Ingresar()

Dim n As Integer
Dim directorio As String
Dim archivoTxt As String
Dim fileIn as String

directorio = "C:\Respaldo"
fileIn = "archivo.txt"

If Dir(directorio, vbDirectory) = "" Then MkDir directorio

n = FreeFile
archivoTxt = directorio & "\" & fileIn
Open archivoTxt For Input As #1
Print #n, "Hola"
Close #n

End Sub


Que diferencia o que funcion cumple el append con relacion al Input???

De antemano gracias

ecerpa

Última edición por ecerpa; 24/06/2008 a las 10:08 Razón: Corrección de código
  #6 (permalink)  
Antiguo 24/06/2008, 10:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Error 55 "File already open"

No, de ninguna manera .
Solo te había colocado como ejemplo, Input es para abrir archivos en modo lectura, mientras que Append es para abrir el archivo y agregar datos en la última línea. A lo que me refería es que debes colocar Close antes del Open.
Código:
Close
Open Archivo For Append As #1
P.S.: ¿Por qué pones n=FreeFile si al fin y al cabo estás abriendo el archivo con índice 1?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 24/06/2008, 10:32
Avatar de ecerpa  
Fecha de Ingreso: mayo-2005
Mensajes: 61
Antigüedad: 19 años
Puntos: 1
Respuesta: Error 55 "File already open"

Ahora comprendi tu respuesta....te agradezco...haré las pruebas correspondientes y despues te comentaré los resultados...

Con respecto a n=FreeFile, nosotros por lo regular trabajamos con apertura de multiples archivos (no como el ejemplo que puse en los post anteriorres) por los que buscamos indices de estos que estén disponibles...

Ejemplo:

En este ejemplo se utiliza la función FreeFile para devolver el siguiente número de archivo disponible. Se abren en el bucle cinco archivos para salida y se escriben en cada uno de ellos algunos datos de ejemplo.

Cita:

Dim count As Integer
Dim fileNumber As Integer
For count = 1 To 5
fileNumber = FreeFile()
Open Archivo & count & ".txt" For Append As #fileNumber
Print #fileNumber, "Hola"
Close#fileNumber
Next
.
.
.
.
Ojalá me hallas comprendido y muchas gracias por la ayuda entregada...un abrazo

ecerpa
  #8 (permalink)  
Antiguo 25/06/2008, 02:13
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Error 55 "File already open"

Hola!

Para casos como este, te recomiendo que utilices una utilidad gratuíta de SysInternals (ahora comprada por Microsoft), llamada "Process Explorer" (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx). Es como el administrador de tareas, pero más completo: puedes ejecutarlo, pulsar Ctrl-F y escribir el nombre del fichero, que ahí te dirá qué proceso lo tiene abierto y podrás ayudarte a depurar.

Lo que puede suceder también es que si estás depurando el programa y cortas la ejecución en el IDE, se te quede algún manejador abierto y los ficheros bloqueados, pero eso debería solucionarse saliendo de VB y volviendo a entrar...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:13.