PDA

Ver la Versión Completa : filesize


gusspagano
19-04-2012, 07:10:52
Tengo un *.txt con 418 lineas, y la función filesize me dice que tengo 114 lineas nada más, alguien sabe por que?

Gracias.

Neftali [Germán.Estévez]
19-04-2012, 09:50:26
¿Puedes poner un ejemplo cómo estás utilizando esa función?
Según la ayuda FileSize retorna el número de registros de un fichero, que no es lo mismo que el número de líneas.

gusspagano
19-04-2012, 17:36:30
ahh, entonces no es lo mismo linea que registro!!

esto es lo que hago:


procedure TForm1.btnOkClick(Sender: TObject);
var
origen,destino,archivo: string;
lista: textfile;
lineas,contador,porcentaje: integer;
begin
origen:=edtOrg.Text;
destino:=edtDtn.Text;
assignfile (lista, opdLst.FileName);
reset (lista);
lineas:=filesize(lista);
showmessage (inttostr(lineas));
contador:=0;
porcentaje:=0;
readln (lista,archivo);
while not Eof (lista) do
begin
copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
readln (lista,archivo);
contador:=contador+1;
porcentaje:=trunc(contador*(100/lineas));
Form1.ProgressBar1.Position:=porcentaje;
end;
copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
closefile (lista);
form1.ProgressBar1.Position:=0;
showmessage ('MISSION COMPLETE !!');
end;

gusspagano
19-04-2012, 17:44:55
ahh, entonces no es lo mismo linea que registro!!

esto es lo que hago:


procedure TForm1.btnOkClick(Sender: TObject);
var
origen,destino,archivo: string;
lista: textfile;
lineas,contador,porcentaje: integer;
begin
origen:=edtOrg.Text;
destino:=edtDtn.Text;
assignfile (lista, opdLst.FileName);
reset (lista);
lineas:=filesize(lista);
showmessage (inttostr(lineas));
contador:=0;
porcentaje:=0;
readln (lista,archivo);
while not Eof (lista) do
begin
copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
readln (lista,archivo);
contador:=contador+1;
porcentaje:=trunc(contador*(100/lineas));
Form1.ProgressBar1.Position:=porcentaje;
end;
copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
closefile (lista);
form1.ProgressBar1.Position:=0;
showmessage ('MISSION COMPLETE !!');
end;

perdón, me faltó decir que según yo, usaría el número de lineas para luego mostrar el avance en una barra de proceso.

Eso es lo que intento hacer, algo sencillo para ustedes seguramente.

ecfisa
19-04-2012, 18:42:08
Hola gusspagano.

Para calcular las líneas del archivo de texto podrías hacer:

function FileNumberLines(Nombre: string): Int64;
begin
if FileExists(Nombre) then
with TStringList.Create do
try
LoadFromFile(Nombre);
Result:= Count;
finally
Free;
end
else
Result:= -1;
end;


Y si el archivo llegara a ser tan enorme que no fuera viable usar TStrings:

function BigFileNumberLines(Nombre:string): Longint;
var
Num: Integer;
f: TextFile;
s: string;
begin
Num:= 0;
AssignFile(f,Nombre);
try
Reset(f);
while not eof(f) do
begin
Readln(f,s);
Inc(Num);
end;
Result:= Num;
CloseFile(f);
except
Result:= -1;
end;
end;


Saludos.

gusspagano
19-04-2012, 19:01:41
Gracias ecfisa, lo voy a intentar...