Hola muchachos, os dejo la última unit que he creado.

Sus utilidades son varias:
LeerFichero: Función para leer el contenido de cualquier fichero que nos devolverá el contenido del mismo en una string.
EscribirFichero: Función para escribir cualquier string en un fichero nuevo.
LeerEOF: Función que leerá el contenido existente entre 2 delimitadores de cualquier fichero, nos devolverá el contenido en una string.
Reverse: Simple string reverse utilizado en la función LeerEOF.

Existe una unit muy similar creada por Xash, tuve algunos problemas con dicha unit así que decidí hacer la mía que, basándome en pruebas, funciona mejor la lectura del EOF.

Código: Seleccionar todo

{
Unit MetalEOF
Autor: Metal_Kingdom
Fecha: 25/04/2012
Web: udtools.net
Funciones: Leer ficheros, escribir ficheros, leer EOF entre 2 delimitadores
}

unit MetalEOF;

interface

function Reverse(Texto: String):String;
function LeerEOF(RutaArchivo, Delimitador1, Delimitador2: String): String;
function LeerFichero(ruta: string): string;
procedure EscribirFichero(QueEscribir, EnQueRuta: string);

implementation

//Simple Reverse.
function Reverse(Texto: String):String;
var
i: integer;
begin
for i:= Length(Texto) downto 1 do
Result:= Result + Texto[i];
end;

//Leer EOF
function LeerEOF(RutaArchivo, Delimitador1, Delimitador2: String): String;
var
F: File;
S: byte;
Total, Rev: String;
begin
Assignfile(F,RutaArchivo);
{$i-}
Reset(F,1);
{$i+}
if IOResult = 0 then
	begin
		while not Eof(F) do
			begin
				blockRead(F,S,1);
				Total:= Total + chr(s);
      end;
    Rev:= Reverse(Total);
    Result:= Reverse(Copy(Rev, Pos(Reverse(Delimitador2), Rev) + Length(Delimitador2),
    Pos(Reverse(Delimitador1), Rev) - Pos(Reverse(Delimitador2), Rev) - Length(Delimitador2)));
	end else Exit;
CloseFile(F);
end;

//Leer contenido de un fichero
function LeerFichero(Ruta: string): string;
var
F: file;
S: byte;
begin
Assignfile(F,Ruta);
{$i-}
Reset(F,1);
{$i+}
if IOResult = 0 then
  begin
      while not eof (f) do
        begin
          blockRead(F,S,1);
          Result:= result + chr(S);
        end;
  end else Exit;
CloseFile(F);
end;

//Escribir cadenas en un fichero nuevo.
procedure EscribirFichero(QueEscribir, EnQueRuta: string);
var
F: textfile;
begin
Assignfile(F,EnQueRuta);
Rewrite(F);
write(F,QueEscribir);
CloseFile(F);
end;

end.
Ejemplo para escribir en un encriptado:

Código: Seleccionar todo

var
stb, server: string;
begin
stb:= LeerFichero('C:\stub.exe');
server:= LeerFichero('C:\server.exe'); 
//En un crypter lógicamente deberemos encriptar antes de escribir, ej: server:= MetCr(server);
EscribirFichero(stb + 'Delimitador1' + server + 'Delimitador2', 'C:\encriptado.exe');
end;
Ejemplo para leer el contenido del EOF (el fichero encriptado):

Código: Seleccionar todo

var
encriptado: string;
begin
encriptado:= LeerEOF('C:\encriptado.exe', 'Delimitador1','Delimitador2');
//Aquí hacemos lo que queramos con el encriptado, desencriptarlo y escribirlo a disco con EscribirFichero, desencriptarlo y hacer uso del runpe, etc..
end;
Espero que os guste, me costó un cojón hacer la puta unit xD, algunas cosas las he ido conociendo a medida que lo iba haciendo así que seguro que se puede mejorar.
UDTools.net
GitHub: https://github.com/MetalUDT
Che, muy bueno y clarito el code. Me encantaria meterme en el puto delphi a mi tambien, pero no me dan los tiempos...
Enhorabuena, y sigue enseñandonos de todo esto que hace que el foro sea mas diverso y mas atractivo !!!
Imagen
Responder

Volver a “Fuentes”