Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизРазложить файл на несколько частей Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c