Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.29;
Скачать: CL | DM;

Вниз

Как удалить файл без возможности его востановления ?   Найти похожие ветки 

 
Lizard   (2002-06-13 21:27) [0]

Как это выполнить программно по принципу Нортоновского
Wipe Info. Чтобы на диск поверх файла записалась всякая лабуда
и первоначальный файл нельзя было восстановить ?

Заранее благодарен.


 
Song ©   (2002-06-13 21:48) [1]


procedure WipeFile(FileName: string);
var
buffer: array [0..4095] of Byte;
max, n: LongInt;
i: Integer;
fs: TFileStream;

procedure RandomizeBuffer;
var
i: Integer;
begin
for i := Low(buffer) to High(buffer) do
buffer[i] := Random(256);
end;
begin
fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
try
for i := 1 to 3 do
begin
RandomizeBuffer;
max := fs.Size;
fs.Position := 0;
while max 0 do
begin
if max SizeOf(buffer) then
n := SizeOf(buffer)
else
n := max;
fs.Write(Buffer, n);
max := max - n;
end;
FlushFileBuffers(fs.Handle);
end;
finally
fs.Free;
end;
Deletefile(FileName);
end;


 
Lizard   (2002-06-14 14:11) [2]

Огромное спасибо за ответ, но что-то ничего не выходит.
Очень буду признателен Вам, если отправите рабочий исходник
(если не трудно).

mailto: unks@mail.ru
Best regards, Lizard.


 
Song ©   (2002-06-14 15:44) [3]


procedure WipeFile(FileName: string);
var
buffer: array [0..4095] of Byte;
max, n: LongInt;
i: Integer;
fs: TFileStream;

procedure RandomizeBuffer;
var
i: Integer;
begin
for i := Low(buffer) to High(buffer) do
buffer[i] := Random(256);
end;
begin
fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
try
for i := 1 to 3 do
begin
RandomizeBuffer;
max := fs.Size;
fs.Position := 0;
while max > 0 do
begin
if max=SizeOf(buffer) then
n := SizeOf(buffer)
else
n := max;
fs.Write(Buffer, n);
max := max - n;
end;
FlushFileBuffers(fs.Handle);
end;
finally
fs.Free;
end;
Deletefile(FileName);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
WipeFile("C:\1.bat");
end;


 
BJValentine ©   (2002-06-14 21:32) [4]

Открываешь файл для перезаписи, записываешь пустую строку туда, закрываешь его и удаляешь. Всё! 5-6 строчек.


 
Lizard   (2002-06-14 21:49) [5]

Огромное спасибо за помощь, все получилось.
Приношу извинения, но появился еще один вопрос.
А если необходимо удалить не один, а группу файлов, расположенных
в одной директории, как это будет выглядеть ?
Предложенный мною ниже способ почему-то не работает и выдает
сообщение о выполнении недопустимой ошибки.
Не могли бы Вы подсказать мне, в чем проблема ?
Спасибо.


procedure WipeFile(FileName: string);
var
buffer: array [0..4095] of Byte;
max, n: LongInt;
i: Integer;
fs: TFileStream;

procedure RandomizeBuffer;
var
i: Integer;
begin
for i := Low(buffer) to High(buffer) do
buffer[i] := Random(256);
end;
begin
fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
try
for i := 1 to 3 do
begin
RandomizeBuffer;
max := fs.Size;
fs.Position := 0;
while max > 0 do
begin
if max=SizeOf(buffer) then
n := SizeOf(buffer)
else
n := max;
fs.Write(Buffer, n);
max := max - n;
end;
FlushFileBuffers(fs.Handle);
end;
finally
fs.Free;
end;
Deletefile(FileName);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
F: TSearchRec;

begin
if FindFirst("C:\Folder\*.*", faAnyFile, F)=0 then
begin
while FindNext(F) = 0 do WipeFile("C:\Folder\"+F.Name);
end;
FindClose(F);

end;



 
Lizard   (2002-06-14 21:54) [6]

To: BJValentine
Такое я пробовал, но wipe info находит оба варианта,
т.е. получаются два файла на диске.


 
Anatoly Podgoretsky ©   (2002-06-14 22:17) [7]

procedure RandomizeBuffer;
...
RandomizeBuffer;
...

Вот это мне всегда нравится, вспоминаю про попа и его собаку


 
Lizard   (2002-06-15 13:48) [8]

Можно подробнее (для начинающих) ?
Спасибо.


 
Anatoly Podgoretsky ©   (2002-06-15 14:03) [9]

У попа была собако он ее убил и на камне написал
У попа была собако он ее убил и на камне написал
У попа была собако он ее убил и на камне написал
У попа была собако он ее убил и на камне написал
У попа была собако он ее убил и на камне написал
У попа была собако он ее убил и на камне написал
...


 
vuk ©   (2002-06-15 15:00) [10]

to Anatoly Podgoretsky:
Там вложенная процедура...


 
~Rand~ ©   (2002-06-16 09:13) [11]

Удалено модератором


 
Anatoly Podgoretsky ©   (2002-06-16 10:27) [12]

Извиняюсь, так неакуратно написано, а как было красиво :-)


 
Rooman ©   (2002-06-16 11:10) [13]

Полноценный Wipe должен содержать следующие моменты:

1. Заполнение файла числом $F6, как при форматировании диска
2. Изменение размера файла (дописка в его конец случайного числа байт)
3. Изменение всех трех дат (создание, изменение, доступ) на случайные
4. Переименование файла в файл с именем "a"
5. Удаление файла DeleteFile

После этого восстановление в исходном виде невозможно (в т.ч. невозможно восстановить и атрибуты файла)


 
Rooman ©   (2002-06-16 11:10) [14]

P.S. п.3 и 4 надо поменять местами...


 
GOOFFY   (2002-06-16 12:20) [15]

Удалено модератором


 
GOOFFY   (2002-06-16 12:21) [16]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2002.08.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
1-95745
Сашечка
2002-08-18 23:47
2002.08.29
Графы - курсач


3-95721
SZap
2002-08-08 13:34
2002.08.29
Как сформировать запрос в TQuery


1-95768
Котяра
2002-08-16 14:10
2002.08.29
Работа с файлами


4-96008
stikriz
2002-06-25 06:37
2002.08.29
Install Shield не запускается из под CreateProcess


1-95750
Olorin
2002-08-15 11:44
2002.08.29
Как треду перед запуском передать/установить параметры/флаги?