Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разложить файл на несколько частей [D7, WinXP]


gonzales ©   (2004-11-11 15:43:00) 

Проблема следующая: имеется клиентский файл, который был получен путем слияния нескольких файлов dos-командой copy (copy /b c:\1.bmp+c:\2.bmp c:\new.bmp). Теперь этот файл необходимо обратно превратить в два (1.bmp, 2.bmp)?
Заранее спасибо


easy   (2004-11-11 20:48:00) [1]

Split('c:\new.bmp','c:\1_.bmp','c:\2_.bmp');


easy   (2004-11-11 20:42:00) [2]

procedure Megre(inputFilename1, inputFilename2, outFilename: string);
var
 f1, f2, fout: TFileStream;
begin
 f1 := TFileStream.Create(inputFilename1, fmOpenRead);
 f2 := TFileStream.Create(inputFilename2, fmOpenRead);
 fout := TFileStream.Create(outFilename, fmCreate);
 try
   fout.CopyFrom(f1, f1.Size);
   fout.CopyFrom(f2, f2.Size);
 finally
   f1.Free;
   f2.Free;
   fout.Free;
 end;
end;

procedure Split(inputFilename, outFilename1, outFilename2: string);
var
 fout1, fout2, fin: TFileStream;
 BitmapFileHeader: TBitmapFileHeader;
 splitpos: int64;
begin
 fin := TFileStream.Create(inputFilename, fmOpenRead);
 fout1 := TFileStream.Create(outFilename1, fmCreate);
 fout2 := TFileStream.Create(outFilename2, fmCreate);
 try
   fin.Read(BitmapFileHeader, sizeof(TBitmapFileHeader));
   fin.Position := 0;
   splitpos := BitmapFileHeader.bfSize;
   fout1.CopyFrom(fin, splitpos);
   fin.Seek(splitpos, soFromBeginning);
   fout2.CopyFrom(fin, fin.Size - splitpos);
 finally
   fin.Free;
   fout1.Free;
   fout2.Free;
 end;
end;


Sun bittern   (2004-11-11 20:08:00) [3]

Vit@ly ©   (11.11.04 19:40) [13]

Блокнот тоже внесет свои коррективы.


begin...end   (2004-11-11 19:50:00) [4]

gonzales   (11.11.04 19:42) [14]

Как раз загвоздка в этом, как разрезать его не открывая в блокноте


Откройте в Far'е или Total Commander'е.


gonzales   (2004-11-11 19:42:00) [5]

вот именно!
Как раз загвоздка в этом, как разрезать его не открывая в блокноте


Vit@ly   (2004-11-11 19:40:00) [6]


> gonzales   (11.11.04 17:45) [3]
> 2 smithson
> BM - есть, как раз две штуки, но если просто по ним отрезать
> в текстовом редакторе, то тип файла потом не разпознается

А каком коде речь? Когда говоришь о текстовом редакторе. Думаю, что блокнотом разрезать удастся, но он не справится с большими объемами. А WordPad, что естественно, вносит свои дополнительные управляющие символы, которые все и портят.


gonzales   (2004-11-11 18:59:00) [7]

метки имеются в виде символов ВМ - характеризующих начало битмэпа
как разделить их теперь? если можно то с кодом


Sun bittern   (2004-11-11 18:59:00) [8]

begin...end ©   (11.11.04 17:53) [8]

см.

gonzales   (11.11.04 17:45) [3]

Не надо их в текстовом редакторе резать :)


Jeer   (2004-11-11 18:52:00) [9]

очень просто работает - сливает 2..n файла в один.:)
Если известны метки границ разделов, то нет проблем разделить файл на исходные.


gonzales   (2004-11-11 17:54:00) [10]

скорее всего
я просто не представляю как работает досовская команда copy и как мне потом разрезать его


begin...end   (2004-11-11 17:53:00) [11]

Всё-таки, наверное, чего-то Вы там не так отрезаете...


gonzales   (2004-11-11 17:50:00) [12]

вот такая вот процедурка - но не пашет:((

Procedure TForm1.GetFromStream ( Source , Dest : TStream ; Index : Integer  );
Var
 Size , I : Integer;

begin
Source.Position := 0;
For i := 0 to index-1 do
  begin
    Source.Read(Size,SizeOf(Integer));
    Source.Position := Source.Position + Size ;
  end;

if Source.position = Source.Size then
 Raise EAccessViolation.Create('Index Out Of Bounds') ;
// ???????? ???????? ?????? ?????
Source.Read(Size,SizeOf(Integer));
// ??????? ????? ? Dest
Dest.Position := 0 ;
Dest.Size := 0 ;
Dest.CopyFrom(Source,Size);
end;


gonzales   (2004-11-11 17:48:00) [13]

в том то и дело, я думал, что можно считать заголовок, понять размер и отрезать кусок, потом опять считать размер и отрезать второй кусок


gonzales   (2004-11-11 17:47:00) [14]

нет нету


begin...end   (2004-11-11 17:46:00) [15]

gonzales   (11.11.04 17:45) [3]

Так размеров исходных файлов нет?


gonzales   (2004-11-11 17:45:00) [16]

2 smithson
BM - есть, как раз две штуки, но если просто по ним отрезать в текстовом редакторе, то тип файла потом не разпознается


Smithson   (2004-11-11 17:01:00) [17]

У формата bmp есть заголовок, который начинается с определенных символов (BM ля-ля-ля). Если это точно были bmp, то можешь поискать в файле эти символы, считать заголовок и, если он корректный, скопировать кусок данных до следующего заголовка.


palva   (2004-11-11 16:55:00) [18]

Ну а файлы 1.bmp 2.bmp потерты что ли? Ну а хоть место, по которому было разрезано, известно? Если да, тогда читаем new.bmp, считаем байты и пишем, сначала в 1.bmp, а потом в 2.bmp.


Наверх

Титульная страница Поиск, карта сайта Написать письмо