X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "MikeC" Newsgroups: comp.os.msdos.djgpp Subject: How to copy a file? Lines: 70 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.3138 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138 Message-ID: Date: Fri, 21 Sep 2007 00:14:25 GMT NNTP-Posting-Host: 86.13.147.52 X-Complaints-To: http://netreport.virginmedia.com X-Trace: newsfe1-win.ntli.net 1190333665 86.13.147.52 (Fri, 21 Sep 2007 01:14:25 BST) NNTP-Posting-Date: Fri, 21 Sep 2007 01:14:25 BST Organization: ntl Cablemodem News Service To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Good people, I know this is probably a C question, but I'm asking it here because DJGPP is DOS-centric, and I'm trying to execute a system call. My question: What's the best way to copy a file? The file I want to copy is on a Unix server. Under DOS, if I try to cd to it, it gives an error message "UNC paths are not supported". I find that I can sense it OK with findfirst(), and I can do what I want, but I have a performance problem. I can't see any function included with DJGPP that will copy files, so I wrote one (copied below). It copies 0x10000 byte buffers from the source file and dumps them to the destination file, and it works OK, but when copying a 10meg file from a network drive, it takes 2 min 19 secs, where a straight DOS copy takes 1 min 9 secs. I tried doing it with a system call, by putting "copy " into a string, the executing system(string); - but it doesn't work, and I don't know why. Here's the function I wrote, that works slowly void file_copy(char *path_i, char *path_o) { FILE *fpi, *fpo; long bufsize = 0x10000; int f_handle; unsigned char buf[bufsize]; long long file_len; struct ftime ft; fpi = fopen(path_i, "rb"); fpo = fopen(path_o, "wb+"); file_len = (long long)filelength(fileno(fpi)); while(file_len > bufsize) { fread(buf, bufsize, 1, fpi); fwrite(buf, bufsize, 1, fpo); file_len -= bufsize; } fread(buf, file_len, 1, fpi); fwrite(buf, file_len, 1, fpo); f_handle = fileno(fpi); getftime(f_handle, &ft); fclose(fpi); fclose(fpo); fpo = fopen(path_o, "r"); f_handle = fileno(fpo); setftime(f_handle, &ft); fclose(fpo); } Thanks, MikeC -- Mental decryption required to bamboozle spam robots: mike_best$ntlworld*com $ = @ * = dot