Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2012, 15:38   #11
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
что за глупость?
чтоб перезаписать файл нулями по вашему нужен асм?
эхх я глупый то, думал достаточно АПИшных-CreateFile->SetFilePointer->WriteFile->CloseHandle.
или Паскалевские File->AssignFile->Reset->FileSize->BlockWrite->CloseFile.
или Дельфийские TFileStream(методы Create->Size->Write->Free).
А можно пример, в инете информация не та.
hon вне форума Ответить с цитированием
Старый 01.01.2012, 15:55   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ЯП какой интересует?(и какой метод(АПИ или библиотечный(если несколько доступно, то указать нужную))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.01.2012 в 15:57.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.01.2012, 19:28   #13
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

delphi. Желательно просто UNIT, который можно подключить в USES
hon вне форума Ответить с цитированием
Старый 03.01.2012, 21:56   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Оформи процедурой, имя файла параметром передавай, размер буфера увеличь, ну и обработку критических ошибок предусмотри. Если 10 раз захочется нулями забить, то 10 раз повторить, а потом удалить
Код:
procedure TForm1.Button1Click(Sender: TObject);
var xStream: TFileStream;
    xBuffer: array [1..512] of Byte;
    i,j,xCount: integer;
begin
  xStream:=TFileStream.Create('E:\AAA.dat',fmOpenReadWrite or fmShareExclusive);
  for i:=1 to 512 do xBuffer[i]:=0;
  xCount:=xStream.Size div 512;
  j:=xStream.Size mod 512;
  for i:=0 to xCount do begin
    if i<xCount then xStream.Write(xBuffer,512)
    else if j>0 then xStream.Write(xBuffer,j);
  end;
  xStream.Free;
  DeleteFile('E:\AAA.dat');
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.01.2012, 22:03   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ADD

Попробовал так, тоже нулями отлично забивает
Код:
  xStream:=TFileStream.Create('E:\AAA.dat',fmOpenReadWrite or fmShareExclusive);
  xCount:=xStream.Size;
  xStream.Size:=0;
  xStream.Size:=xCount;
  xStream.Free;
P.S. Есть смутное подозрение, что этот способ не подойдет, поскольку часть фрагментов результирующего файла может оказаться физически на другом месте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.01.2012 в 09:53.
Аватар вне форума Ответить с цитированием
Старый 05.01.2012, 18:53   #16
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Аватар, спасибо. +1 (добавлю, когда поставлю другим). Но при чем тут 512 и что делает код. Пожалуйста, прокомментруйте код.
hon вне форума Ответить с цитированием
Старый 05.01.2012, 19:00   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Hon, 512 это размер буфера. Его можно и нужно увеличить для ускорения обнуления. А что комментировать ёлы_палы? О каждой использованной команде в help-е дофига и больше написано
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2012, 19:14   #18
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Hon, 512 это размер буфера. Его можно и нужно увеличить для ускорения обнуления. А что комментировать ёлы_палы? О каждой использованной команде в help-е дофига и больше написано
Это:
Код:
  xCount:=xStream.Size div 512;
  j:=xStream.Size mod 512;
А размер буфера можно делать получается любой? Например 2000000000 ?
hon вне форума Ответить с цитированием
Старый 05.01.2012, 19:21   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

xCount - кол-во целых блоков по 512 байт в файле
j - длина последнего блока, меньшего 512 байтов или 0, если длина последнего блока равна 512
2000000000 - ну если память компа позволяет, то можно и так повыпендриваться. А если серьёзно - смотри пост #2 от Utkin
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2012, 20:24   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ох, а я как то и забыл про эту тему...
Код:
var FS:TFileStream;
     i:int64;
     b:array of byte;
begin
 FS:=TFileStream.Create(Filename,fmOpenReadWrite);
 i:=FS.Size;
 SetLength(b,4*1024);//размер буфера, он же макс размер записи за один прием.
 ZeroMemory(@b[0],Length(b));//заполнение буфера нулями, можно чем угодно заполнить:)
 FS.Position:=0;//не помню про позицию по умолчанию, потому так
 while i>0 do
  dec(i,FS.Write(b[0],Min(Length(b),i)));
 FS.free;
поидее так.
uses math помним
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 05.01.2012 в 20:28.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные вырожения без компонентов, возможно ли? Arsenx777 Общие вопросы Delphi 8 03.09.2011 19:25
Возможно ли востановить данные в Excel? vovikbvovikb Помощь студентам 0 08.08.2009 09:53
SQL подзапрос без сравнения, возможно ? DS75 БД в Delphi 7 03.06.2009 12:32
Возможно ли записать данные в свой исполняемый файл? eskander Общие вопросы Delphi 12 02.03.2009 16:42
Возможно ли через ПХП передавать данные между разными сайтами? tunyash PHP 1 31.07.2008 16:26