Delphi - Funciones para leer archivos + velocidad

 
Vista:

Funciones para leer archivos + velocidad

Publicado por Geo (38 intervenciones) el 03/05/2003 08:19:19
Qué tal, estoy haciendo un programa que va leyendo un byte de un archivo y lo escribe en otro, es como hacer una copia del archivo byte por byte, lo hago porque antes debo quitar algunas cosas del archivo del que se lee.
Bien, esto ya logré hacerlo en C, checando algunos ejemplos que encontré para Linux, pero antes de lograrlo, estuve tratando en Delphi, el código es más o menos como sigue:

AssignFile(aleer, 'original.ext');
AssignFile(aescribir, 'nuevo.ext');
Reset(aleer);
Rewrite(aescribir);
Seek(aleer,Index);
//index me da el byte a partir del cual se empieza a leer el archivo
// esto lo determino antes eliminando parte del archivo
while not EOF(aleer) do
begin
Read(aleer,valor);
Write(aescribir,valor);
end;
CloseFile(aleer);
CloseFile(aescribir);

La variable valor es del tipo byte.

Esto funciona perfectamente con archivos pequeños, pero con archivos relativamente grandes (de 500 KB en adelante), es lentísimo, debido a esto empecé a ver cómo se haría en C, y lo logré, usando el mismo método/algoritmo, leyendo un caracter con las funciones fgetc, pero es mucho más rápido, de hecho, hasta puedo leer varios archivos y juntarlos en uno solo en lo que el programa en Delphi apenas va a la mitad de su proceso.
Mi pregunta es: ¿hay alguna otra función para acceder a los archivos además de Read y Write? Recuerdo haber visto hace algún tiempo un programa en Visual Basic que declaraba unas funciones readfile/writefile de la librería kernel32, ¿alguien sabe cómo podría usarlas en Delphi? Espero puedan ayudarme.

Saludos.
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

RE:Funciones para leer archivos + velocidad

Publicado por Diego Romero (636 intervenciones) el 03/05/2003 20:18:11
Prueba con BlockRead y BlockWrite.
Recuerda que si usas este código en un programa Delphi que usa GUI tienes la penalización de que tu programa deberá atender los mensajes de Windows además de hacer lo que quieres que haga.
Si el programa hace solo eso te conviene hacer una aplicación de consola.
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

RE:Funciones para leer archivos + velocidad

Publicado por Geo (38 intervenciones) el 04/05/2003 22:26:51
ok, gracias por el comentario, entonces investigaré sobre esas funciones (nunca las he usado), y sobre la posibilidad de emplear una aplicación GUI o una de consola.
Sólo otro favor, por si supieras de alguna página con información sobre las funciones, espero me la pudieras dar :).
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

RE:Funciones para leer archivos + velocidad

Publicado por Diego Romero (636 intervenciones) el 05/05/2003 04:06:13
Pues creo que la ayuda es bastante explícita. Si el inglés es un problema no tengo inconveniente en explicarte el funcionamiento de esos dos procedimientos via e-mail.
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

RE:Funciones para leer archivos + velocidad

Publicado por victor (102 intervenciones) el 05/05/2003 15:46:14
No probaste usando el TStringList?, yo he hecho un sistema que importaba los datos desde un archivo de texto a una tabla, al principio lo hice como tu lo haces, con AssignFile, Reset y Readln, pero posteriormente he usado el TStringList, esta tiene un método LoadFromFile que importa desde un archivo todas las líneas, y posteriormente podes acceder a cada línea con TStringList.Strings[i] donde i es el indice.

En mi caso particular, tuve una ligera ventaja de segundos. A lo mejor tu tb tendrás algunas ventajas, es cuestión de probar.

Espero que te sirva.
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