Problema al leer un .txt que se modifica constantemente

Iniciado por farlaine23, 18 Noviembre 2011, 16:15 PM

0 Miembros y 3 Visitantes están viendo este tema.

farlaine23

Hola:
Tengo un problema,con un programa que me genera un .txt y lo va rellenando por lineas de datos.(hecho en c)
Bien,ahora con otro programa,quiero leer ese fichero .txt(hecho con Visual Basic)
El problema es que no me deja leerlo,porque el fichero esta abierto,ya que se esta rellenando constantemente.
Que me recomendais que puedo hacer??

79137913

HOLA!!!

Probaste copiarlo y leer la copia?

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BlackZeroX

* Se me ocurre usar Semaforos para que sepa si tu programa en C esta haciendo algo en el archivo o si el programa en VB6 le esta haciendo algo...
* Tambien se me ocurre usar SendMessage para que se avises enre procesos...
* PIPES...
* Sockets...
* habra mas soluciones... pero no se me ocurre ninguna mas.

Ducles Lunas!¡.
The Dark Shadow is my passion.

RyogiShiki

#3
Creo que esto está más que contestado aquí: http://foro.elhacker.net/programacion_cc/cerrar_ficheros_en_c-t345142.0.html

¿Se podría considerar doble post? no se, las preguntas son diferentes, pero imagino que van enfocadas al mismo problema

---EDIT---

A lo que me entra una. Si el archivo se está actualizando en todo momento los cambios que se realicen de reflejaran una vez el archivo haya sido abierto? O solo se cargara en memoría el contenido que llevaba hasta ese momento. porque si es así entonces es mucho mejor hacer pipes o sockets.


farlaine23

Hola:
Gracias por vuestras respuestas.
El caso es que se llama a una funcion,que tiene ordenes de escribir en fichero y cerrarlo en su cuerpo....pero el programa que tiene que leerlo me da el error de otro programa lo tiene ocupado.
Lo del sendMessage me puedes informar mejor?
Un socket me seria util?Seria dificil programarlo?

seba123neo

eso debe ser porque el programa que lo abre no esta "compartiendo" por asi decirlo para que lo puedan abrir externamente, por ejemplo en C# o en VB .NET es una pavada, con abrir el archivo como FileShare.ReadWrite, te deja abrirlo desde otro programa aun cuando este en uso.

ese programa que lo lee vos tenes acceso al codigo fuente ?

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

WHK

El problema debe estar en que desde la aplicación en c estas abriendo el archivo con +w para escribir dentro del archivo y lo mas seguro es que desde visual basic también lo estas abriendo con atributos de lectura y escritura.

Intenta abrirlo solamente con atributos de lectura.

BlackZeroX

Cita de: farlaine23 en 19 Noviembre 2011, 22:45 PM
Hola:
Gracias por vuestras respuestas.
El caso es que se llama a una funcion,que tiene ordenes de escribir en fichero y cerrarlo en su cuerpo....pero el programa que tiene que leerlo me da el error de otro programa lo tiene ocupado.
Lo del sendMessage me puedes informar mejor?
Un socket me seria util?Seria dificil programarlo?


Se me ocurre para que tus APP corran adecuadamente intercomunicarlos con Sockets o PIPES o algun metodo que no use el disco duro a un 3er programa que se encargue de hacer las Colas que requieras...

Es decir un "microservidor" que solo leea o escriba en el txt de manera adecuada siendo este el que se encargue de manipular por completo el archivo... Desde mi punto de vista seria lo Ideasl...

Dulces Lunas!¡.
The Dark Shadow is my passion.

farlaine23

Hola de nuevo
Os respondo:
-Tengo acceso al codigo fuente de los 2 programas,pero FileShare.ReadWrite para C o Visual Basic,no me va a servir no??
-He intentado lo que recomendo whk y no lo consegui.El programa de c lo habre con permiso a y el de Visual lo abre con r.
-BlackZeroX como podria hacer ese microservidor?Aunque las aplicaciones esten en 2 lenguajes diferentes,se podra hacer??Es arduo complicado??

Una cosa,mientras escribe los datos en el .txt,tambien saca los mismos datos por pantalla,podria utilizar esos datos para leerlos,en vez del .txt?Me daria el mismo problema,verdad??

BlackZeroX

#9
Cita de: farlaine23 en 20 Noviembre 2011, 04:39 AM
Hola de nuevo
Os respondo:
-Tengo acceso al codigo fuente de los 2 programas,pero FileShare.ReadWrite para C o Visual Basic,no me va a servir no??
-He intentado lo que recomendo whk y no lo consegui.El programa de c lo habre con permiso a y el de Visual lo abre con r.
-BlackZeroX como podria hacer ese microservidor?Aunque las aplicaciones esten en 2 lenguajes diferentes,se podra hacer??Es arduo complicado??

Una cosa,mientras escribe los datos en el .txt,tambien saca los mismos datos por pantalla,podria utilizar esos datos para leerlos,en vez del .txt?Me daria el mismo problema,verdad??

- Si optas por abrir en solo lectura pues peudes usar las APIS...
- ...
- Pues si usas Sockets no importara el lenguaje para este micro servidor (Independientemente si es C/C++ o vb6, hazlo en el que te acomodes más, si quieres mas velocidad y acceso mas directo a la memoria usa C/C++)... necesitarías un protocolo para que se intercomuniquen los procesos y leerte la teoría de colas (queue) o mejor conocida como FIFO... con esta teoría podrás armar el servidor de una manera muy amena y optima y las instrucciones será amigables desde un punto de vista de análisis en comunicaciones entre procesos. (EDITO) Añado que inclusive puedes implementar un sistema de cache para agilizar tu sistema...

Dulces Lunas!¡.
The Dark Shadow is my passion.