Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Problema Leyendo Archivos Binarios Con Read
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Problema Leyendo Archivos Binarios Con Read 
 
Hola a todos!

Estoy haciendo una rutina que lee un archivo desde un directorio como un flujo de datos y lo escribe en otro directorio, usando open, read,write y close.

Originalmente pensé en usar copy, pero me pareció muy lento, la opción de usar los comandos del sistema operativo tampoco me pareció justo, así que decidí usar las herramientas de gambas.

De una forma muy rudimentaria dejo el código aquí

dim flujoorigen, flujodestino as stream
dim rutaorigen, ruta destino as string
dim contenido as string

rutaorigen=user.home & "/Escritorio/pp"
rutadestino=user.home & "/Escritorio/prueba/pp"

flujoorigen = open rutaorigen for read
flujodestino= open rutadestino for write create

while not eof(flujoorigen)
   read #flujorigen, contenido, 1024
   write #flujodestino, contenido, 1024
wend

close #flujoorigen
close #flujodestino
 


Hay mas cosas pero no vienen al caso ahora, el problema se presenta en la instrucción read que presenta un error END OF FILE.
Por lo que deduzco eof no está detectando el fin de archivo en el flujo de datos....
Eso si este archivo pp es un mp3 y lo reproduce sin problema.

Que puede estar pasando?  Se me ocurrió algo muy loco. que el último bloque de 1024 bytes contenga la marca de fin de archivo, siendo ese bloque menor a 1024... Pero por eso digo que es muy loco.  Lo cierto es que es la primera vez que lo veo.

Si alguien sabe que ocurre o ve el error, ya sabe ....    gracias de antemano por iluminarme ....

Saludos
 



 
viejito - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Leyendo Archivos Binarios Con Read 
 
Ok, hice una reconsideración del tamaño del flujo a ser leído y coloqué 1 byte por ciclo, eso será mas lento pero ahora no falla.

Sin embargo, sigo sin entender porque falla el read cuando se le indica que lea 1024 bytes por ciclo...

Será cierto lo que había pensado sobre el último bloque de flujo leido??
 



 
viejito - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Leyendo Archivos Binarios Con Read 
 
viejito:

Citar:
que el último bloque de 1024 bytes contenga la marca de fin de archivo, siendo ese bloque menor a 1024

Creo que eso es lo que pasa,
read #flujorigen, contenido, 1024
es que fuerzas a leer "trozos" de 1024 bits, y si el ultimo es menor... pues sobrepasas el final.

Lo que podrias hacer es averiguar el tamaño del archivo, y dividirlo en 1024, y completar los ciclos completos, dejando para el final el trocito que falte del archivo

por ejemplo:
el fichero tiene 3024 bytes de tamaño, seria repetir el ciclo de lectura 1024, 2 veces, y luego un ciclo de lectura del resto (3024-1024*2)
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Leyendo Archivos Binarios Con Read 
 
jsbsan escribió: [Ver mensaje]
es que fuerzas a leer "trozos" de 1024 bits, y si el ultimo es menor... pues sobrepasas el final.

No hay nada que añadir a lo que ha dicho el nuestro amigo jsbsan, sólo querría proponer una otra solución:

dim rutaorigen, rutadestino as string

   rutaorigen=user.home & "/Escritorio/pp"
   rutadestino=user.home & "/Escritorio/prueba/pp"
 
   File.Save(rutadestino, File.Load(rutaorigen))

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Leyendo Archivos Binarios Con Read 
 
Jsbsan,Vuott, tus soluciones funcionan bien.

Ahora quisiera implementar si es que resulta posible una barra de progreso.  La idea es que se trata de una rutina de respaldo, sé que existen muchas soluciones que puedo implementar, he estado leyendo al respecto aquí y en la mayoría de blogs sobre gambas, wikis y demás. Leí una respuesta sobre hilos y me enteré que eso no está contemplado en gambas, al parecer, eso es una lástima.

Por otra parte, hablando totalmente claro, haciendo comparaciones con visual basic, en tiempos de respuesta gambas deja en ridículo a visual basic. ("comentario xenofobo", jajaja), lo cierto es que si puedo mover archivos tan rápido, no tiene caso usar una barra de progreso y de acuerdo a mi experiencia sobre el tema, al usuario le interesa mas levantarse e irse al apretar el botón respaldar.

Lo que si me gustaría saber es como se comporta la solución de vuott, moviendo archivos grandes de varios gigabytes. Otro punto importante es la integridad de datos, ya que se trata de respaldar una base de datos.
 



 
viejito - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cargar Archivos Binarios En Una Base De Da... shordi Aplicaciones/Fragmentos de Código 3 Jueves, 21 Agosto 2014, 09:17 Ver último mensaje
shordi
No hay nuevos mensajes ¿como Comparar Dos Archivos De Imagen Bi... jsbsan General 7 Domingo, 18 Diciembre 2016, 17:17 Ver último mensaje
tincho
No hay nuevos mensajes Archivos, Seek, Read Etc. tincho Aplicaciones/Fragmentos de Código 9 Viernes, 09 Noviembre 2018, 23:01 Ver último mensaje
tincho
No hay nuevos mensajes Solicitud De Ejemplo Y Tutorial Para Leer ... tincho Aplicaciones/Fragmentos de Código 21 Miercoles, 14 Noviembre 2018, 23:20 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron