Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2006, 11:50
Аватар для Olegator
Olegator Olegator вне форума
Прохожий
 
Регистрация: 27.09.2006
Адрес: Липецк
Сообщения: 5
Репутация: 10
По умолчанию Безвозвратное удаление файлов

Знает кто, как удалить файл, переписав на его место несколько раз всякую фигню, чтоб никто не смог восстановить?
__________________
Грех предаваться унынию, когда есть другие грехи!
Ответить с цитированием
  #2  
Старый 27.09.2006, 13:33
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Копай в сторону TFileStream.

ЗЫЖ Интересно, а для чего это нужно
Ответить с цитированием
  #3  
Старый 27.09.2006, 15:30
Аватар для Ross
Ross Ross вне форума
Активный
 
Регистрация: 15.10.2005
Адрес: Казань
Сообщения: 250
Репутация: 30
По умолчанию

Взято из delphiworld, статья называется "Удалить файл навсегда":

Код:
{ 
  If you want to get rid of a file normally you just delete it. 
  But someone else can undelete it if the file hasn't been wiped correctly. 
  For security purposes, to insure that certain files are permanently 
  gone, the WipeFile procedure writes over the data in the file with 
  random characters and then erases it. 

  Wenn man eine Datei nicht mehr braucht, loscht man sie einfach. 
  Aber jemand anders kann die Datei wieder herstellen, wenn sie 
  nicht "richtig" geloscht wurde. 
  Aus Sicherheitsgrunden, um sicherzustellen, dass eine Datei permanent 
  geloscht wird, uberschreibt die WipeFile Prozedur eine Datei mit 
  Zufalls-Zeichen und loscht sie anschliessend. 
}

 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;
Ответить с цитированием
  #4  
Старый 27.09.2006, 21:17
Аватар для Olegator
Olegator Olegator вне форума
Прохожий
 
Регистрация: 27.09.2006
Адрес: Липецк
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Интересно, а для чего это нужно
Бывают разные причины: некоторые просто параноики, а мне для университета надо. А вообще полезная штука. FileRecovery все освоили, иногда надо поконкретнее удалить...
__________________
Грех предаваться унынию, когда есть другие грехи!
Ответить с цитированием
  #5  
Старый 28.09.2006, 07:15
Аватар для Olegator
Olegator Olegator вне форума
Прохожий
 
Регистрация: 27.09.2006
Адрес: Липецк
Сообщения: 5
Репутация: 10
По умолчанию

Ross, пасиба! Буду пробовать и пытаться
__________________
Грех предаваться унынию, когда есть другие грехи!
Ответить с цитированием
  #6  
Старый 28.09.2006, 19:34
Аватар для Ross
Ross Ross вне форума
Активный
 
Регистрация: 15.10.2005
Адрес: Казань
Сообщения: 250
Репутация: 30
По умолчанию

пУзалУста. Рад помочь.
Ответить с цитированием
  #7  
Старый 29.10.2006, 23:28
Аватар для Olegator
Olegator Olegator вне форума
Прохожий
 
Регистрация: 27.09.2006
Адрес: Липецк
Сообщения: 5
Репутация: 10
По умолчанию Всё работает

В приведённом выше исходнике ошибка. Таже самая ошибка встречается ещё кое-где в инете. Вот так вот люди не совсем честно копируют исходники друг у друга... вместе с ошибками.

Вот как я доработал код. Ниже приведена процедура обработки нажатия кнопки "Open" формы "Form1" и кнопки "Delete" (в последней процедуре используется TrackBar "Num" с вариантами надёжности удаления - количества переписываний файла). Вариант рабочего кода в совершенно никаком оформлени можно скачать в прикреплённом файле.

Код:
procedure TForm1.OpenClick(Sender: TObject);
var
 FileName: string;

begin
OpenDialog1.Execute;

FileName:=OpenDialog1.FileName;

Path.Caption:= FileName;
end;

procedure TForm1.DeleteClick(Sender: TObject);
 var
   buffer: array [0..4095] of Byte;
   max, n: LongInt;
   i,j,k: Integer;
   fs: TFileStream;
   FileName: String;
 begin

 case Num.Position of
0: k:=1;
1: k:=3;
2: k:=5;
3: k:=10;
4: k:=15;

end;
   FileName:= Path.Caption;
   fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
   try
     for i := 1 to k do
     begin
            for j := Low(buffer) to High(buffer) do
       buffer[j] := Random(256);
       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);
   ShowMessage('Все пучком');
 end;
Вложения
Тип файла: zip Del.zip (7.9 Кбайт, 69 просмотров)
__________________
Грех предаваться унынию, когда есть другие грехи!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter