![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обрезка файла [D7, XP]
allucard © (2007-04-17 15:05:00)Подкажите как можно удалить часть файла?
Например удалить первые 3743 байт в файла.
Спасибо.
allucard (2007-04-18 10:14:00) [1]
> Сергей М. © (18.04.07 10:13) [13]
Спасибо.
Сергей М. (2007-04-18 10:13:00) [2]
> allucard (18.04.07 10:08) [12]
with ms do
for i := to Size-1 do
if PByteArray(Memory)[i] = 0 then
PByteArray(Memory)[i] = $20
allucard (2007-04-18 10:08:00) [3]
> Сергей М. © (18.04.07 09:17) [11]
как теперь поменять все биты $00 на $20.
for i:= 0 to ms.Size do
begin
ms.Position := i;
...и на этом мои познания закончились.
Подскажите как дальше?
Сергей М. (2007-04-18 09:17:00) [4]Move((@PByteArray(ms.Memory)[3743])^, ms.Memory^, ms.Size - 3743);
allucard (2007-04-18 09:07:00) [5]Что неправильного в параметрах Move, что ему не нравится?
allucard (2007-04-18 08:34:00) [6]
> Сергей М. © (18.04.07 08:31) [8]
Его нет, когда вводишь внутри @PByteArray(ms.Memory)[3743],
пишет Variable required.
Сергей М. (2007-04-18 08:31:00) [7]
> ms.Memory - такого нет.
>
Как это нет ?)
А это что по-твоему (цитата из станд.справки):
Delphi Object and Component Reference
TMemoryStream properties
..
Derived from TCustomMemoryStream
Memory
Derived from TStream
Position
Size
??
allucard (2007-04-18 08:27:00) [8]
> Сергей М. © (17.04.07 16:32) [5]
> Move(@PByteArray(ms.Memory)[3743], ms.Memory^, ms.Size - 3743);
ms.Memory - такого нет.
allucard (2007-04-18 08:16:00) [9]
> Сергей М. © (17.04.07 16:32) [5]
Всем доброе утречко.
А я могу теперь сделать так, если мне не нужно удалять физически из файла бинарный бред вначале файла, просто его как бы отбросив:
ms := TMemoryStream.Create;?
ms.LoadFromFile(такой-то);
Move(@PByteArray(ms.Memory)[3743], ms.Memory^, ms.Size - 3743);
ms.Size := ms.Size - 3743;
ms.Position := 0;
StringList:= TStringList.Create;
StringList.LoadFromStream(ms);
ms.Free;
StringList.Delimiter := ' ';
StringList.DelimitedText := StringList.Text;
for i := StringList.Count - 1 downto 0 do if StringList[i] = '' then StringList.Delete(i);
Memo1.Lines := StringList;
StringList.Free;
Сергей М. (2007-04-17 16:32:00) [10]
> allucard (17.04.07 16:21) [4]
> 12кбайт
Ну эт "децл", как говорит "поколение Пепси")
Тады можно и, к примеру, так:
ms := TMemoryStream.Create;
ms.LoadFromFile(такой-то);
Move(@PByteArray(ms.Memory)[3743], ms.Memory^, ms.Size - 3743);
ms.Size := ms.Size - 3743;
ms.Position := 0;
ms.SaveToFile(оной же);
ms.Free;
allucard (2007-04-17 16:21:00) [11]Спасибки.
> Сергей М. © (17.04.07 15:07) [1]
12кбайт
MBo (2007-04-17 15:11:00) [12]Если поискать, то вполне может оказаться, что еще кого-то волнуют подобные проблемы, например:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1176733394&n=18
Ega23 (2007-04-17 15:09:00) [13]
1. MemoryStream.LoadFromFile;
2. MemoryStream.Position := 3743
3. MemoryStream.Read
4. MemoryStream2.Write
5. MemoryStream2.SavetoFile;
Тупо в лоб.
Сергей М. (2007-04-17 15:07:00) [14]Файл-то большой ?