{ MC> That's really important, for what you've tested and shown. MC> However, your specific values don't apply to everyone, as smaller HDs MC> have smaller sector sizes (4096, 2048, etc.). In order for your thesis MC> to work best, the code/logic should also determine the HD sector size, MC> before allocating buffers and trying to maximize performance to this MC> degree. That gets down into some pretty low-level code... It wouldn't be "that" tough really (if you wanted to do it). You simply make the buffer as large as the optimum size for the smallest cluster size which is 64512 (1024*63). Then do your blockread/blockwrites based on the optimal number for the current cluster size. It is, after all, the size of the block to read/write which is adversely affecting the speed, and not the size of the buffer itself. It would look something like this. } Uses Dos; Const maxarray = 64512; Var regs :registers; buf :array[1..maxarray] of char; fil1, fil2 :file; maxread, numread, numwritten, clustSize :word; begin regs.cx := 0; {set for error-checking} regs.ax := $3600; {get free space} regs.dx := 0; {0=current, 1=a:, 2=b:, etc.} msDos (regs); clustsize := regs.ax * regs.cx; {cluster size} maxread := maxarray - (maxarray mod clustsize); {the largest number of bytes ("char"s) evenly divisible by the cluster size that will fit in our array} assign(fil1,paramstr(1)); assign(fil2,paramstr(2)); reset(fil1,1); rewrite(fil2,1); repeat blockread(fil1,buf,maxread,numread); blockwrite(fil2,buf,numread,numwritten); until ((eof(fil1)) or (numwritten=0)); close(fil1); close(fil2); end. Error checking not included!! You may wish to redefine "regs.dx" above if the copy drive is other than current, but you will likely find this gives you the fastest "copy" regardless of the cluster size of the medium. With the noteable exception that if you had a medium with 512 byte clusters, the above optimal number "could" be increased by 512 if the variables were otherwise defined. (Placing the buffer in the heap for instance.) Not that any drive with a 512 byte cluster is really worth the trouble but if you were going to put "buf" in the heap then you should consider using maxarray = 65024 (127*512) instead of 64512. Dave... --- GEcho 1.11+ * Origin: Forbidden Knights Systems * (905)820-7273 * Dual * (1:259/423.0) SEEN-BY: 250/99 101 201 301 401 470 501 601 701 801 901 259/0 SEEN-BY: 259/99 200 303 400 423 500 396/1 3615/50 51 PATH: 259/423 400 99 250/99 3615/50