Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Escribir en archivos con Delphi (https://www.clubdelphi.com/foros/showthread.php?t=87782)

JuanOrtega 25-02-2015 18:33:16

Escribir en archivos con Delphi
 
Hola estoy estudiando sobre como escribir en todo tipo de archivos con Delphi y llegue a este codigo :

Código Delphi [-]
var
  openfile: TextFile;
begin
      AssignFile(openfile, 'login.exe');
      Append(openfile);
      WriteLn(openfile,'[username]usuario-password[username]');
      CloseFile(openfile);
end;

Este codigo escribe al final de cualquier archivo en este caso escribo en un ejecutable los datos (al final) del login del usuario para usar despues en el administrador , lo mejor de este codigo que hice fue que no necesito usar Classes solo los uses por defecto.

¿ Hay mejores alternativas a este codigo sin usar Clasess o este es codigo esta bien como esta ?

Casimiro Notevi 25-02-2015 18:46:25

Eso es para ficheros de texto:
Código Delphi [-]
 openfile: TextFile;
¿Para qué quieres hacer eso? :confused:

JuanOrtega 25-02-2015 19:51:26

porque la unica forma en que se me ocurrio hacerlo , estoy haciendo el login de una agenda , en esta parte pregunto los datos de login y los escribo al final del programa login.exe despues en login.exe me leo a si mismo y compruebo los datos para mostrar el administrador de la agenda.

Casimiro Notevi 25-02-2015 20:22:27

Pero guárdalo mejor, por ejemplo, en un simple fichero .ini

JuanOrtega 25-02-2015 21:00:38

Pero eso es lo que trato de que todo este en el exe , tambien tengo pensado incrustar sonidos en el exe pero es un proyecto a futuro.

Casimiro Notevi 25-02-2015 21:03:09

Cita:

Empezado por Lepuke (Mensaje 489338)
Pero eso es lo que trato de que todo este en el exe

¿Por qué y para qué?
¿Los contactos de la agenda también van a estar en el ejecutable? ¿Cómo? :confused:
Eso no se hace así.

AgustinOrtu 25-02-2015 23:52:18

Concuerdo con Casimiro, no solo no esta "bueno" tener los datos de un login metidos dentro de un ejecutale, sino que la forma que lo haces es medio feucha tambien

Podrias declarar dos costantes en tu programa o usar resourcestrings:

Código Delphi [-]
unit Unit1;

interface

uses
  ...

// opcion 1, resourcestring
resourcestring
 sUserName = 'pepito';
 sPassword  = '1234';

// opcion 2, constantes
const
 NombreUsuario = 'pepito';
 PasswordUsuario = '1234';

Y luego la usas como cualquier costante/variable que hayas declarado

Código Delphi [-]
  ShowMessage(sUserName);
  ShowMessage(sPassword);
  ShowMessage(NombreUsuario);
  ShowMessage(PasswordUsuario);

De esta forma te queda metido dentro del ejecutable como necesitas y dejas al delphi que se encarge de hacerlo, no vaya a ser que corrompas el exe o algo por andar metiendo como no se debe

escafandra 26-02-2015 01:18:32

Volviendo a la pregunta original, la forma general de escribir en un fichero sería algo como esto:

Código Delphi [-]
var
  hFile: integer;
  Buffer: PCHAR;
  Size: integer;
begin
   // abro para escribir
   hFile:= FileOpen('File.bin', fmOpenWrite);
   // Coloco el índice de archivo al final
   FileSeek(hFile, 0,2);
   // El Buffer y su tamaño
   Buffer:= PCHAR('Añado al final');
   Size:= lstrlen(Buffer);
   // Escribo el buffer
   FileWrite(hFile, Buffer^, Size);
   // Cierro el fichero
   FileClose(hFile);
end;

Escribir en un ejecutable, un archivo binario, datos en modo texto, no es buena idea, mejor escribirlos en modo binario.
El problema de escribir un login en el ejecutable es que es muy fácil de que lo vean los curiosos. Cuando lo hago, lo guardo en variables cuyo valor encripto previamente y uso una rutina para descifrar en mi programa.

Si lo haces al final del programa, tendrás que tener previsto un modo de localizar cuando empiezan tus datos, generalmente una firma colocada delante. No es sencillo que un ejecutable se modifique y se guarde así mismo. Otra forma es escribir en los recursos del mismo, más fácil de extraer después.


Saludos.

ecfisa 26-02-2015 07:46:08

Hola Lepuke.

Te agrego otra opción para realizarlo:
Código Delphi [-]
procedure AddAtEnd(const aFileName: string; const aText: string);
begin
  with TFileStream.Create(aFileName, fmOpenWrite) do
  try
    Seek(0, soFromEnd);
    Write(aText[1], Length(aText));
  finally
    Free;
  end;
end;
Pero coincido plenamente con lo que te han aconsejado los compañeros, no es la mejor opción para lo que buscas hacer.

Saludos :)

escafandra 26-02-2015 10:44:16

Otra idea para guardar tu password es el registro de Windows, así quede fuera del alcance de los fisgones de archivos.

Puestos a variar el código, usemos la API de Windows:
Código Delphi [-]
procedure Write(FileName: PCHAR; Buffer: Pointer; Size: integer);
var
  hFile: integer;
begin
  hFile:= CreateFile(FileName, GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0);
  if hFile <> -1 then
  begin
    _llseek(hFile, 0, FILE_END);
    _lwrite(hFile, Buffer, Size);
    _lclose(hFile);
  end;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 05:01:45.

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