How to copy multiple files into one (Views: 711)
Problem/Question/Abstract: Remember DOS? We can combine multiple ASCII files to one by using the copy command like: copy file1 + file2 + file3 file4 .That makes file4 to become the sum of file1, file2 and file3. Does the ShFileOperation API supports this feature or is there any other API support this? Answer: Solve 1: procedure TForm1.Button1Click(Sender: TObject); var Stream1, Stream2: TFileStream; begin Stream1 := TFileStream.Create('c:\file4', fmCreate or fmShareExclusive); try { first file } Stream2 := TFileStream.Create('c:\file1', fmOpenRead or fmShareDenyNone); try Stream1.CopyFrom(Stream2, Stream2.Size); finally Stream2.Free; end; { next file } Stream2 := TFileStream.Create('c:\file2', fmOpenRead or fmShareDenyNone); try Stream1.CopyFrom(Stream2, Stream2.Size); finally Stream2.Free; end; { and so on } finally Stream1.Free; end; end; Solve 2: function AppendFiles(Files: TStrings; const DestFile: string): integer; var srcFS, destFS: TFileStream; i: integer; F: string; begin result := 0; if (Files.Count > 0) and (DestFile <> '') then begin destFS := TFileStream.Create(DestFile, fmCreate or fmShareExclusive); try i := 0; while i < Files.Count do begin F := Files(i); Inc(i); if (CompareText(F, DestFile) <> 0) and (F <> '') then begin srcFS := TFileStream.Create(F, fmOpenRead or fmShareDenyWrite); try if destFS.CopyFrom(srcFS, 0) = srcFS.Size then Inc(result); finally srcFS.Free; end; end else begin { error } end; end; finally destFS.Free; end; end; end; |