Solved

# Concatenating  files programmatically

Posted on 1997-10-09
260 Views
Last Modified: 2010-04-04
I want to append or concatenate together some files programmatically. Is there a way I can call the DOS 'COPY' command from Delphi, so I can issue the command 'COPY file1.txt+file2.txt+file3.txt result.txt? Or is there some Delphi command that will do it for me?

Thanks,
Shawn Halfpenny

P.S: new e-mail address : drumme59@sprint.ca
0
Question by:aztec
• 6
• 3
10 Comments

LVL 12

Accepted Solution

andrewjb earned 50 total points
ID: 1347132
procedure TForm1.Button1Click(Sender: TObject);
var
lOut : tFileStream;
lIn  : tFileStream;
begin
lOut := tFileStream.Create( 'c:\temp\out' , fmCreate );

lIn  := tFileStream.Create( 'c:\temp\in.1' , fmOpenRead );
lOut.CopyFrom( lIn , lIn.Size );
lIn.Free;

lIn := tFileStream.Create( 'c:\temp\in.2' , fmOpenRead );
lOut.CopyFrom( lIn , lIn.Size );
lIn.Free;

{ etc.! }

lOut.Free;
end;
0

LVL 3

Expert Comment

ID: 1347133
Or just trap exceptions from the filestream objects ....

0

LVL 12

Expert Comment

ID: 1347134
Yes, but if you need progress bar then what ?
0

LVL 3

Expert Comment

ID: 1347135
Then copy not all in one step, but this is the same as BlockRead. This is only other idea.
0

LVL 3

Expert Comment

ID: 1347136
adrewjb - Sorry for my next comment, but what about sharing ? I don;t know if it is possible with stream. Do you know about this.
0

LVL 3

Expert Comment

ID: 1347137
The second parameter of the Create call can lock the file, I think.

0

LVL 12

Expert Comment

ID: 1347138
Yes You have right. The direct file functions is better only when more than one user often updates the file. Better means so You can write program easly. Stupid example can be file for conversation within some users (I say so this is stupid !).
Thank you. I just will be using whenever it is possible FileStream.
0

LVL 3

Expert Comment

ID: 1347139
function ConcatFiles(inFilename1,inFilename2,outFilename : string) : boolean;
const BUFFERSIZE                = $FFFF; var inFile1, inFile2, outFile : file; buffer : pointer; readbytes : integer; begin {$I-}

{Open all the files}
AssignFile(inFile1,inFilename1); Reset(inFile1,1);
if IOResult <> 0 then begin ConcatFiles := false; exit end;
AssignFile(inFile2,inFilename2); Reset(inFile2,1);
if IOResult <> 0 then begin ConcatFiles := false; exit end;
AssignFile(outFile,outFilename); ReWrite(outFile,1);
if IOResult <> 0 then begin ConcatFiles := false; exit end;

{allocate memory for the buffer}
getMem(buffer,BUFFERSIZE);

{copy file 1}
while not EOF(inFile1) do begin
BlockRead(inFile1,buffer^,BUFFERSIZE,readbytes);
BlockWrite(outFile,buffer^,readbytes);
end;

{copy file 2}
while not EOF(inFile2) do begin
BlockRead(inFile2,buffer^,BUFFERSIZE,readbytes);
BlockWrite(outFile,buffer^,readbytes);
end;

{free the buffer memory}
freeMem(buffer,BUFFERSIZE);

{close all the files}
CloseFile(inFile1); CloseFile(inFile2); CloseFile(outFile);

{\$I+}
ConcatFiles := true;
end;

0

Expert Comment

ID: 1347140
hi mes ! This differs from my comment only in buffer. Your buffer is better of course, but answer from adrewjb is the best.
0

LVL 3

Expert Comment

ID: 1347141
Hi, I'd like to re-submit my grade for AndrewJB's answer to this. He really did give an excellent answer - it works beautifully - so I'd like to give him an A.

Cheers
Shawn Halfpenny
drumme59@sprint.ca
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

#### 896 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!