Solved

file copying in C

Posted on 2003-10-22
9
330 Views
Last Modified: 2010-04-17
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)  
0
Comment
Question by:ozkaneren
9 Comments
 

Accepted Solution

by:
theMuzz earned 125 total points
ID: 9601636
/* 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
 
LVL 23

Expert Comment

by:brettmjohnson
ID: 9602623
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
 
LVL 84

Expert Comment

by:ozo
ID: 9602797
#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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 23

Expert Comment

by:brettmjohnson
ID: 9602958
> #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
 
LVL 20

Expert Comment

by:jmcg
ID: 9604129
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
 
LVL 23

Expert Comment

by:brettmjohnson
ID: 9604375
> 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
 

Expert Comment

by:theMuzz
ID: 9605941
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
 
LVL 5

Expert Comment

by:drnick
ID: 9612406
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

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

In this post we will learn different types of Android Layout and some basics of an Android App.
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

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

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

Join & Ask a Question