![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте уважаемые. У меня следующая проблема:
Есть некий двоичный файл, необходимо считать из него определённый кусок, в Memorystream. Давлю вопрос третий день уже. В примере хотел бы увидеть, например копирование с 60го по 105ю позицию. Заранее благодарен. PS: -подопытный файлы у меня будут и 50кб, и 10Мб (не более) -Структура файлов мне заранее известна - Отловленные куски в дальнейшем будут сохраняться в отдельные файлики, тоже двоичной структуры разумеется |
|
#2
|
||||
|
||||
|
открыть файл в TFileStream, задать позицию через Position, прочитать нужное количество Read(var Buffer; Count: Longint), записать куда надо.
|
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
|||
|
|||
|
Вот архиватор этого "своего" формата, кстати создал я без проблем неделю назад. Данные запаковывает. И заголовок пишет. А при раз архивации проблемы всякие вылетают.
|
|
#5
|
||||
|
||||
|
я тоже пробовал и не раз. все сохраняет как нужно.
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Вовa (27.02.2013)
| ||
|
#6
|
|||
|
|||
|
Ясно. Спасибо. Видимо проблема у меня в том что всё это происходит в очень изощренном 3-е вложенном цикле While. По скольку Первые два наружних "while" цикла, разбираются с заголовком файла. Видимо у меня просто путаница гдето...
|
|
#7
|
||||
|
||||
|
загружает в Мемо строку из Unit1.pas именно
Цитата:
Код:
var
FileStream: TFileStream;
MemoryStream: TMemoryStream;
begin
FileStream:=TFileStream.Create('Unit1.pas', fmOpenRead);
try
FileStream.Position:=$24;
MemoryStream:=TMemoryStream.Create;
try
MemoryStream.CopyFrom(FileStream, 74);
MemoryStream.Position:=0;
Memo1.Lines.LoadFromStream(MemoryStream);
finally
MemoryStream.Free;
end;
finally
FileStream.Free;
end;
end; |
|
#8
|
||||
|
||||
|
Всё прекрасно работает через MemoryStream
Код:
var fs : TFileStream; ms : TMemoryStream; begin fs:= TFileStream.Create(Имя файла, fmOpenRead); ms:= TMemoryStream.Create; fs.Position:= 60; ms.CopyFrom(fs, 105); //В ms кусок fs с 60 по 105 ... fs.Free; ms.Free; end; |