Trwałe usuwanie plików.

0

Witam
Poszukuję algorytmu, dzięki któremu będę mógł trwale usunąć pliki, tak żeby nie było możliwości ich odzyskania. Gdzieś kiedyś widzialem to na pewnej stronce, ale nie moge tego znalejść. Za pomoc z góry dzięki

0

Nadpisz zawartość pliku śmieciami i usuń. Plik odzyskasz, ale ze zniszczoną zawartością.

0

Tak, ale zeby to zrobić potrzebny jest algorytm na pobranie w którym sektorze znajdują sie pliki i w tych sektorach nadpisać np: 100razy jakimiś śmieciami. Nie wystarczy samo FileDelete i FileCreate w tym samym miejscu. Ja niestety tego zrobić nie umiem :/

0

Jakie sektory? Otwórz plik, zapisz mu śmieci, zapisz go i dopiero usuń.

Plik ma 4B.

AssignFile(F, 'plik.sss');
Rewrite(F, 1);
BlockWrite(F, LongInt(Random(999999));
CloseFile(F);
DeleteFile();

Nadpisanie zawartości jest dość skuteczne.

0

Nie wiedzialem ze jest taka funkcja jak BlockWrite, która to realizuje. Dzieki wielkie :)

0

Przy lini "BlockWrite(F, LongInt(Random(999999));" którą napisaleś kompilator wyskakiwal ze jest błąd. Sprawdzilem w encyklopedii i zauwazylem ze brakowalo jednego parametru buff. Napisałem więc coś takiego:

procedure TForm1.UsunTrwale(Plik: String);
var
  F: File;
  i: integer;
  Buff : array[0..1024] of Byte;
begin
  for i:=1 to 1000 do
  begin
    AssignFile(F, Plik);
    Rewrite(F, 1);
    BlockWrite(F, Buff, Random(65000));
    CloseFile(F);
  end;
  DeleteFile(Plik);
end;

Po tym zabiegu program odpala, jednak w programie przy linii BlockWrite wyskakuje taki błąd:

Project Usuwacz.exe raised exception class EInOutError with message I/O error 1784. Process stopped. Use Step or Run to continue

Czy jesteś w stanie mi jeszcze pomóc?

0

Mój błąd. Naskrobałem program do generowania losowej wartości pliku. Rozmiar bufora 4kb. Kombinuj.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  // rozmiar bufora - 4kb
  BufSize = 4096;

type
  // bufor ze śmieciami
  TRandomBuf = array [0..BufSize-1] of Byte;

var
  BytesLeft :LongInt; // ile zostało bajtów do zapisania
  BufferLeft:LongInt; // rozmiar bufora lub to co zostanie
  F         :file;
  RandomBuf :TRandomBuf;

// zapełnianie bufora wartościami losowymi
procedure InitBuf(var ABuf :TRandomBuf);
var
  i :SmallInt;
begin
  Randomize;
  for i := 0 to BufSize-1 do
  begin
    ABuf[i] := Random(256);
  end;
end;

begin
  AssignFile(F, 'd:\plik.txt');
  Reset(F, 1);
  BytesLeft := FileSize(F);
  CloseFile(F);
  Rewrite(F, 1);
  while BytesLeft > 0 do // do momentu zapisania całego pliku
  begin
    InitBuf(RandomBuf); // generuj bufor
    if BytesLeft >= BufSize then
       BufferLeft := BufSize    // jak większe niż bufor to bufor
    else
       BufferLeft := BytesLeft; // jak nie to tyle ile plik ma bajtów
    BlockWrite(F, RandomBuf, BufferLeft); // zapis
    Dec(BytesLeft, BufferLeft); // aktualizacja licznika
  end;
  CloseFile(F);
end.
0

Losowana długość pliku jest zwykle większa od bufora. Może to powoduje błąd.

0

Nie, kurde, błąd był w parametrach dla BlockWrite. Tak dawno nie używałem, że zapomniałem jakie są.

0

Hmmm... A po co marnowac czas na wymyslanie smieci (mam na mysli ten random)? Czy nie wystarczy zapisac pliku np. spacjami?

1 użytkowników online, w tym zalogowanych: 0, gości: 1