file copying in C

hello I am looking how to copy a file in C
I mean
like this :

in ms dos prompt I will prompt

program.exe 1.dat 2.dat

and 1.dat will be copied to 2.dat ( I dont know how to use argc argv , I would appreciate if you can explain this)  
ozkanerenAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

theMuzzCommented:
/* argc will give you the number of arguments you've passed
   argv[] returns the values for each argument

int main(int argc, char* argv[])
{
      int numberOfArguments;
      numberOfArguments = argc;

      string arg1, arg2, arg3; // and so on

      arg1 = argv[0];
      arg2 = argv[1];
      arg3 = argv[2];
}

Can't remember if first argument is argv[0] or argv[1], I'm pretty sure it's 0.


so... program.exe three small arguments
would result in

arg1 = 'three'
arg2 = 'small'
arg3 = 'arguments'

Hope this helps
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
brettmjohnsonCommented:
If you invoke the program as follows:

program.exe 1.dat 2.dat

Then the main() routine of program.exe will receive argc, and argv as follows:

argc = 3
argv[0] = "program.exe"
argv[1] = "1.dat"
argv[2] = "2.dat"

0
ozoCommented:
#include <stdio.h>
#define buflen 1000
char buffer[buflen];
int main( int argc, char *argv[] ){
  FILE *F,*T;
  int n;
  if( argc != 3 ){
    printf("usage: %s from to\n",argv[0]);
    exit(1);
  }
  if( !(F=fopen(argv[1],"r")) ){
    perror(argv[1]);
    exit(1);
  }
  if( !(T=fopen(argv[2],"w")) ){
    perror(argv[2]);
    exit(1);
  }
  while( n = fread(buffer,1,buflen,F) ){
    fwrite(buffer,1,n,T);
  }
}
0
Determine the Perfect Price for Your IT Services

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden with our free interactive tool and use it to determine the right price for your IT services. Download your free eBook now!

brettmjohnsonCommented:
> #define buflen 1000
> char buffer[buflen];

Disk sectors are 512 bytes in size, so it is most efficient to read
data in multiples of 512.  So you would be better off with buflen of 1024
than 1000.   Even such a tiny buffer is inefficient for disk copying.
Try buflen of 16384.


0
jmcgOwnerCommented:
But the stdio library takes care of matching buffer sizes to file systems' preferred block sizes, so the buffer size you use in a stdio-using program makes no difference in the size and alignment of the read and write transactions with the actual disk device.

But I, too, would have chosen a larger buffer size.

And, if you're looking for efficiency, I'd probably forego the use of stdio calls entirely.
0
brettmjohnsonCommented:
> And, if you're looking for efficiency, I'd probably forego the use of stdio calls entirely.

Yeah, for strictly large block reads & writes, the buffered io in fopen(), et al provides no benefit.
I prefer to use open() et al, instead.
0
theMuzzCommented:
brettmjohnson:

you're right about that. Thanks for correcting me. As i said it's been a while so a little refreshing is always great.
0
drnickCommented:
if you are on windows, the most efficient way to copy a file would be to use

#include <windows.h>

and

BOOL CopyFile(
  LPCTSTR lpExistingFileName,
  LPCTSTR lpNewFileName,
  BOOL bFailIfExists
);

then the os does it for you..
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming

From novice to tech pro — start learning today.