2013-04-22 3 views
3

У меня есть два бинарных файла (предположим, это ZIP-файл, ранее нарезанный на 2 части). Как я могу объединить их в один файл? Точнее, добавьте второй файл к первому.Как объединить два файла в один?

ОБНОВЛЕНИЕ: Ребята, спасибо всем, кто ответил мне, но это не совсем то, что мне нужно. В принципе, мне нужен аналог команды оболочки: "копировать/б file.000 + file.001 + file.002 file.bin"

+0

Спасибо за редактирование, чтобы прояснить свое намерение. Обратите внимание, что эта критическая информация должна быть включена в ваш первоначальный пост, чтобы люди не делали ненужную работу для вас. –

+0

@Jerry обновление ничего не меняет. Команда 'copy' делает то же самое, что и код в моем ответе, и именно это мы все поняли, что вопрос будет все время. Это архив, который охватывает несколько файлов, которые необходимо перестроить. –

ответ

10

Как это:

var 
    InStream, OutStream: TFileStream; 
.... 
OutStream := TFileStream.Create(OutFileName, fmCreate); 
try 
    InStream := TFileStream.Create(InFileName1, fmOpenRead); 
    try 
    OutStream.CopyFrom(InStream, InStream.Size); 
    finally 
    InStream.Free; 
    end; 
    InStream := TFileStream.Create(InFileName2, fmOpenRead); 
    try 
    OutStream.CopyFrom(InStream, InStream.Size); 
    finally 
    InStream.Free; 
    end; 
finally 
    OutStream.Free; 
end; 

или в более общем конкатенировать множественным файлы:

procedure ConcatenateFiles(const InFileNames: array of string; 
    const OutFileName: string); 
var 
    i: Integer; 
    InStream, OutStream: TFileStream; 
begin 
    OutStream := TFileStream.Create(OutFileName, fmCreate); 
    try 
    for i := 0 to high(InFileNames) do 
    begin 
     InStream := TFileStream.Create(InFileNames[i], fmOpenRead); 
     try 
     OutStream.CopyFrom(InStream, InStream.Size); 
     finally 
     InStream.Free; 
     end; 
    end; 
    finally 
    OutStream.Free; 
    end; 
end; 

вызовов это так:

ConcatenateFiles(['Part1', 'Part2'], 'Outfile.zip') 
+0

+1, но пока это отвечает на вопрос, предположим, что пользователь хочет извлечь эти два файла позже. Как это делается? –

+3

@JerryDodge Объединенный ZIP-файл не два файла. Два файла здесь, по-видимому, представляют собой архив, который был разделен на два для целей передачи и должен быть объединен обратно вместе до следующего шага. Этот следующий шаг будет включать реализацию ZIP-архивного считывателя. –

+3

Q: Кто из OP хочет снова сломать Шалтай? Похоже, он просто вырезал оригинальный .zip-файл пополам (или что-то очень похожее). – paulsm4

Смежные вопросы