Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Разложить файл на несколько частей   Найти похожие ветки 

 
gonzales   (2004-11-11 15:43) [0]

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


 
palva ©   (2004-11-11 16:55) [1]

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


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

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


 
gonzales   (2004-11-11 17:45) [3]

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


 
begin...end ©   (2004-11-11 17:46) [4]

gonzales   (11.11.04 17:45) [3]

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


 
gonzales   (2004-11-11 17:47) [5]

нет нету


 
gonzales   (2004-11-11 17:48) [6]

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


 
gonzales   (2004-11-11 17:50) [7]

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

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;


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

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


 
gonzales   (2004-11-11 17:54) [9]

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


 
Jeer ©   (2004-11-11 18:52) [10]

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


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

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

см.

gonzales   (11.11.04 17:45) [3]

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


 
gonzales   (2004-11-11 18:59) [12]

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


 
Vit@ly ©   (2004-11-11 19:40) [13]


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

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


 
gonzales   (2004-11-11 19:42) [14]

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


 
begin...end ©   (2004-11-11 19:50) [15]

gonzales   (11.11.04 19:42) [14]

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


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


 
Sun bittern ©   (2004-11-11 20:08) [16]

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

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


 
easy ©   (2004-11-11 20:42) [17]

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;


 
easy ©   (2004-11-11 20:48) [18]

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.067 c
14-1100228068
Думкин
2004-11-12 05:54
2004.11.28
С днем рождения! 12 ноября


1-1100538198
VasRog
2004-11-15 20:03
2004.11.28
Дельфи + Excel


1-1100338954
Balkon
2004-11-13 12:42
2004.11.28
Проблема с посылкой сообщения потоку.


1-1099921466
nopox
2004-11-08 16:44
2004.11.28
Многоуважаемые, есть Twebbrowser. зашел я на страничку, а мне


1-1100604775
Rifo
2004-11-16 14:32
2004.11.28
Буфер обмена-как до него добраться?