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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2011, 12:44   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Стереть файл...

Как удалить все данные в файле, что-бы он стал 0 кб? Для TFileStream...
VintProg вне форума Ответить с цитированием
Старый 06.09.2011, 12:59   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от VintProg Посмотреть сообщение
Как удалить все данные в файле, что-бы он стал 0 кб? Для TFileStream...
seek в 0 от начала файла и потом через Handle TStream используя WinApi - SetEndOfFile установить конец файла, что по сути, конец файла = начало файла (смещение 0 байт от начала).

p.s. я лично уже забыл, поиск занял 2-3 минуты.
BOBAH13 вне форума Ответить с цитированием
Старый 06.09.2011, 13:00   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Для файлстрима сработает SetSize := 0, т.к. реализация там взята у BOBAH13

Код:
procedure THandleStream.SetSize(const NewSize: Int64);
begin
  Seek(NewSize, soBeginning);
{$IFDEF MSWINDOWS}
  Win32Check(SetEndOfFile(FHandle));
{$ELSE}
  if ftruncate(FHandle, Position) = -1 then
    raise EStreamError(sStreamSetSize);
{$ENDIF}
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.09.2011, 13:08   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Сообщение от VintProg Посмотреть сообщение
Как удалить все данные в файле, что-бы он стал 0 кб? Для TFileStream...
Куда проще удалить файл а на его место положить свой нулевого размера...
Человек_Борща вне форума Ответить с цитированием
Старый 06.09.2011, 13:09   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Для файлстрима сработает SetSize := 0, т.к. реализация там взята у BOBAH13

Код:
procedure THandleStream.SetSize(const NewSize: Int64);
begin
  Seek(NewSize, soBeginning);
{$IFDEF MSWINDOWS}
  Win32Check(SetEndOfFile(FHandle));
{$ELSE}
  if ftruncate(FHandle, Position) = -1 then
    raise EStreamError(sStreamSetSize);
{$ENDIF}
end;
Да не у меня собственно, просто VCL это есть обвертка над API, для Windows - WinAPI соответственно, так что не удивительно, просто я как и написал, забыл уже VCL, разумеется в данном случае лучше использовать SetSize, как вы и написали.
BOBAH13 вне форума Ответить с цитированием
Старый 06.09.2011, 13:18   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Куда проще удалить файл а на его место положить свой нулевого размера...
Угу. Разве что если твой работодатель оценивает не качество кода, а число строк. Тогда вместо Size := 0; можно замутить проектик на 30 человекочасов )

Цитата:
Да не у меня собственно
Да я пошутил, собственно )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 06.09.2011 в 16:02.
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стереть нарисованный текст F1960 Win Api 2 05.08.2011 09:09
как стереть нарисованную линию? Yokka Общие вопросы .NET 4 06.02.2011 19:15
как стереть символ перед курсором? rem37 Общие вопросы Delphi 4 30.04.2009 00:54
хочу стереть линию с канвы.КАК? harmager Общие вопросы Delphi 1 24.11.2008 10:28
Стереть винчестер Veytarn Свободное общение 4 10.02.2007 10:12