Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Fiecheros binarios en delphi (https://www.clubdelphi.com/foros/showthread.php?t=46188)

@nit@ 25-07-2007 23:41:35

Fiecheros binarios en delphi
 
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:
Código PHP:

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

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 05:29:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi