PDA

Ver la Versión Completa : Fiecheros binarios en delphi


@nit@
25-07-2007, 23:41:35
Si yo tengo ficheros binarios en los que guardo datos de personas (como puede ser el nombre, la edad, numero de documento, estado civil), como hago para borrar alguno de estos datos o modificarlo?.

jhonny
25-07-2007, 23:55:17
Pero... ¿De que manera guardas esos datos?, ¿En una BD, en archivo plano, en un XML?, si la cosa es en un archivo binario, pues la verdad es que me confundo bastante, ya que para meter todo eso dentro de un ejecutable, estaríamos hablando de una especie de recurso o algo asi, pero al momento de compilarlo.

Mejor dicho, sería muy agradable que nos informaras un poco mas detalladamente acerca del asunto.

@nit@
26-07-2007, 00:05:55
Aca explico como hago:

Type
registro=record
nombre:string[20];
documento:string[10];
end;
Var
cliente:registro;
personas:type of registro;


Al crear el archivo hago lo siguiente
assignfile(personas,'archivo.dat');
rewrite(personas);

Despues si quiero guardar algo en el archivo uso:
write(personas,clientes);

Ahora el tema es que cuando quiero borrar o modificar algo no se como hacerlos porque con la sentencia Read solo puedo leer lo ultimo que guarde en el archivo.

cHackAll
26-07-2007, 04:50:14
function DelReg(Index: Cardinal): Boolean;
var hFile, Pos, Dummy: Cardinal; var Last: TRegistro;
begin
hFile := CreateFile('archivo.dat', GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
Result := hFile <> INVALID_HANDLE_VALUE;
if not Result then Exit; // No se pudo acceder al archivo
Result := Index < (GetFileSize(hFile, nil) div SizeOf(TRegistro));
if not Result then // Registro fuera de rango
begin
CloseHandle(hFile);
Exit;
end;
Pos := SetFilePointer(hFile, -SizeOf(Last), nil, FILE_END); // Te vas al último registro
ReadFile(hFile, Last, SizeOf(TRegistro), Dummy, nil); // Lo lees
SetFilePointer(hFile, Index * SizeOf(Last), nil, 0); // Te vas al registro a eliminar
WriteFile(hFile, Last, SizeOf(Last), Dummy, nil); // Lo pisas con el último
SetFilePointer(hFile, Pos, nil, 0); // Regresas al ultimo registro
SetEndOfFile(hFile); // Truncas el archivo en ésa posición
CloseHandle(hFile);
end;

Decía "en delphi", luego ví "Código PHP" así que te lo dejo con pura API. Funciona si no interesa el orden de los registros.

@nit@
26-07-2007, 21:01:36
Gracias por tu respuesta.. pero los codigos que necesito son para delphi.. el tema es que sin querer aprete un icono que no debia y aparecia codigo Php.
Disculpa las molestias y si podes pasame el cogido para delphi.
Gracias!:)

cHackAll
27-07-2007, 00:03:13
Lo que te deje esta en sintaxis Pascal así que te funciona en Delphi. Solo que use APIs pues no me gusta el tipo file, file type y demas