|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Удаление последних байтов
Всем привет! Такой вопрос: к примеру у меня есть файл размером 5байтов. Я хочу удалить последний байт.Не записать в последний байт "0",а реально удалить байт так что размер файла станет на 1 байт меньше,в данном случае станет 4... Предложили переписать файл,а в цикле поставить размер файла минус кол-во ненужных байтов.Но это очень долго для больших файлов... Может кто знает как это сделать проще?
|
#2
|
||||
|
||||
При испльзовании TFileStream для работы с файлами достаточно присвоить нужный размер свойству Size. И все.
Код:
var f : TFileStream; f := TFileStream.Create('SomeFile', fmOpenWrite); f.Size := f.Size - 1; // обрезаем файл на 1 байт. f.Free; Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#3
|
|||
|
|||
Спасибо...
|
#4
|
|||
|
|||
Просто уточнение. Еще со времен DOS запись в файл нуля байт являлась признаком того, что файл обрезается по текущей позиции. По моему, в этом плане в Windows ничего не изменилось, хотя более корректно вызвать
SetEndOfFile(Handle) TFileStream именно это и делает. Смотрим исходники: procedure THandleStream.SetSize(NewSize: Longint); begin Seek(NewSize, soFromBeginning); Win32Check(SetEndOfFile(FHandle)); end; |
#5
|
|||
|
|||
Вообще-то,в функции seek первый параметр указывает на сопряженный файл,а именно на переменную типа file. Вопрос:почему у тебя первый параметр longint?
|