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