Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизКак Найти похожие ветки
← →
Sergey_la (2004-01-29 00:40) [0]Проблема заключается в следующем:
Есть файл длиной где-то в 300 Мб, в конце этого файла -
50 Мб нулей. Как можно получить файл длиной в 250 Мб, не прибегая к копированию даных в новый файл?
← →
Palladin (2004-01-29 00:47) [1]Truncate + F1
← →
Slym (2004-01-29 03:58) [2]SetEndOfFile
← →
8ung (2004-01-29 11:43) [3]Работай с Tmemorystream.
При загрузке файла Tmemorystream грузит файл в память. Таким образом ты можешь изменять файл, открытый Tmemorystream, а затем записать его поверх старого.
← →
jack128 (2004-01-29 11:49) [4]
> 8ung © (29.01.04 11:43) [3]
ну да и 300 мешков памяти занимаешь, просто так..
← →
8ung (2004-01-29 11:54) [5]Допустим нули начинаются с байта по адресу $20.
Пример:
var
tm1,tm2 : TMemoryStream;
begin
tm1 := TMemoryStream.Create;
tm2 := TMemoryStream.Create;
tm1.LoadFromFile("C:\file.EXE");//загрузить в tm1 файл "C:\file.EXE"
tm1.Seek(0,soFromBeginning);//прейти в позицию 0 в файле
tm2.CopyFrom(tm1,$20);//скопировать из tm1 в tm2 20h байт
tm1.Free;
tm2.SaveToFile("C:\file.EXE");//сохранить полученный файл в "C:\file.EXE"
tm2.Free;
end;
← →
Vit@ly (2004-01-29 11:58) [6]> Sergey_la (29.01.04 00:40)
читай Palladin © (29.01.04 00:47) [1]
Assign
Reset( ,1)
Seek()
Truncate
Close
← →
Palladin (2004-01-29 11:58) [7]
> 8ung © (29.01.04 11:54) [5]
более идиотского решения придумать нельзя...
← →
pasha_golub (2004-01-29 12:56) [8]Palladin © (29.01.04 11:58) [7]
Можно. :-)
for i:= FileSize(F) downto DeletePos do
begin
Seek(F,i);
Truncate(F);
end;
← →
Sergey_la (2004-02-04 00:44) [9]Ребят, спасибо большое!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c