Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
8-1093505993
Andrey
2004-08-26 11:39
2004.11.28
распознование формата картинки


14-1099729482
Шишкин Илья
2004-11-06 11:24
2004.11.28
Перенести функцию на Delphi


14-1100149608
Dmitriy O.
2004-11-11 08:06
2004.11.28
Ясир Арафат умер. Официально


4-1097946522
Viper
2004-10-16 21:08
2004.11.28
Мышь


3-1098992137
GanibalLector
2004-10-28 23:35
2004.11.28
результат в ХП





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский