![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обьединит файлы
Oleg_teacher © (2007-04-27 20:06:00)как можна обьединить несколько файла в один с не текстовой информацыей
Novice (2007-04-28 09:21:00) [1]способ 1:
var
f1, f2: file;
xfer: Word;
buf: PChar;
begin
AssignFile(f1, name1);
Reset(f1);
Seek(f1, Filesize(f1));
AssignFile(f2, name2);
Reset(f2);
GetMem(buf, 65000);
repeat
BlockRead(f1, buf^, 65000, xfer);
BlockWrite(f2, buf^, xfer);
until
xfer < 65000;
CloseFile(f1);
CloseFile(f2);
end;
способ 2:
Procedure TForm1.ThisISHowIPutFilesIn ;
var
ABigFileStream, SomeSmallFiles : TMemoryStream ;
begin
ABigFileStream := TMemoryStream.Create ;
try
SomeSmallFiles := TMemoryStream.Create ;
try
SomeSmallFiles.LoadFromFile('C:\SomeSmalFile1.txt');
AddToStream(SomeSmallFiles,ABigFileStream);
SomeSmallFiles.LoadFromFile('C:\SomeSmalFile2.txt');
AddToStream(SomeSmallFiles,ABigFileStream);
// enz
finally
SomeSmallFiles.Free ;
end;
ABigFileStream.SaveToFile('C:\MrBig.DDD')
finally
ABigFileStream.free ;
end;
end;
Procedure TForm1.ThisISHowIGetStufOut ;
var
ABigFileStream, SomeSmallFiles : TMemoryStream ;
begin
ABigFileStream := TMemoryStream.Create ;
try
ABigFileStream.LoadFromFile('C:\MrBig.DDD');
SomeSmallFiles := TMemoryStream.Create ;
try
GetFromStream(ABigFileStream,SomeSmallFiles,0);
SomeSmallFiles.SaveToFile('C:\SomeSmalFile1.txt');
GetFromStream(ABigFileStream,SomeSmallFiles,1);
SomeSmallFiles.SaveToFile('C:\SomeSmalFile2.txt');
// и т.д.
finally
SomeSmallFiles.Free ;
end;
finally
ABigFileStream.free ;
end;
end;
Procedure TForm1.AddToStream ( Source , Dest : TStream );
var
Size : Integer ;
begin
Source.position := 0 ;
// Сохраняем размер, помещая его в первый байт
Size := Source.Size ;
Dest.Write(Size,SizeOf(Integer));
Dest.CopyFrom(Source,Source.size);
end;
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;
(с) DelphiWorld - и вопросов будет меньше.
Fredy314 (2007-04-28 08:59:00) [2]а если так
rar a 3.zip 1.zip 2.txt
то потом можно будет раз"единить обратно
Alx2 (2007-04-28 01:10:00) [3]copy /b 1.zip + 2.jpg 3.smth
Desdechado (2007-04-27 20:42:00) [4]copy 1.zip + 2.jpg 3.smth