Función para falsear el tamaño de un fichero, ej: tamaño en disco 1 KB, propiedades del fichero 1 GB.

Traducida de [Enlace externo eliminado para invitados]
{****************************************************
 FakeSizeAllocation On Disk
 Author: Metal_Kingdom
 Original M3: foro.udtools.net/showthread.php?19017
 URL: udtools.net
 Pourpose: Create a 1GB File to Disk Without Allocation (Check File Property to See)
 Coded in Delphi XE7
 Usage: FakeSize('X:\FileIn.xxx', 'X:\FileOut.xxx');
 ****************************************************}

Function FakeSize(FileIn, FileOut: string): Boolean;
var
  Origen    : THandle;
  Destino   : THandle;
  FSize     : DWORD;
  Buffer    : PChar;
  bReturned : DWORD;
const
  lDistanceToMove = 1073741824;
begin
  if FileExists(FileIn) then
  begin
    Result := True;
    Origen := FileOpen(FileIn, fmOpenRead);
    FSize := GetFileSize(Origen, nil);
    Destino := FileCreate(FileOut);
    GetMem(Buffer, FSize);
    FileRead(Origen, Buffer^, FSize);
    FileWrite(Destino, Buffer^, FSize);
    if not DeviceIoControl(Destino, FSCTL_SET_SPARSE, nil, 0, nil, 0, bReturned, nil) then
      Result:= False;
    SetFilePointer(Destino, lDistanceToMove, nil, 0);
    SetEndOfFile(Destino);
    FileClose(Destino);
    FileClose(Origen);
  end
  else
  begin
    Result := False;
  end;
end;
UDTools.net
GitHub: https://github.com/MetalUDT
Te quedo genial Metal haber si le hago la traducion a c++
olle por ultimo creo que falto el codigo de control del FSCTL_SET_SPARSE
const
FSCTL_SET_SPARSE: DWord = $900C4;
Skype:crack8111
En XE7 no es necesario declarar la constante ya que está incluida en Winapi.Windows

Gracias por el comentario!
UDTools.net
GitHub: https://github.com/MetalUDT
Responder

Volver a “Fuentes”