![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разложить файл на несколько частей [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.