All pastes #25071 Raw Edit

Unnamed

public text v1 · immutable
#25071 ·published 2005-10-10 01:11 UTC
rendered paste body
//Eric Diamond
//CSE 660
//Programming Assignment #1
//File Copying
//******************************************

#include <iostream.h>
#include <fstream>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

using namespace std;

void arg(int argc, char *argv[]);
char *fout_filename;
char *fin_filename;
bool use_file_out = false;
bool use_screen_out = true;
//******************************************
int main(int argc, char *argv[])
{
	//declarations and stuff
	arg(argc, argv);
    FILE * inFile;
    FILE * outFile;
	int x = 0;
    inFile=fopen(fin_filename, "r");
    outFile=fopen(fout_filename,"wt");
	
	//check in and output files
    if (!inFile)
      {
        cout << "Unable to open input file" << endl;
        exit(1); // terminate with error
      }
    if (!outFile)
      {
        cout << "Unable to open output file" << endl;
        exit(1); // terminate with error
      }
	
	//basic menu loop
	do
	{
		cout<<endl;
		cout<<"********************" << endl;
		cout<<" File Copy Utility" << endl;
		cout<<"********************" << endl;
		cout<<" 1 - getc putc" << endl;
		cout<<" 2 - read write" << endl;
		cout<<" 3 - fread fwrite" << endl;
		cout<<" 4 - lseak" << endl;
		cout<<"********************" << endl;
		cin >> x;
	}while(x>4 || x<0);

	//switch between 4 different copy types
	switch (x)
	{
		case 1:	//getc and putc
		{
			char c;
			while ((c = getc(inFile)) != EOF) //put chars in c untill end of file
			{
				putc(c , outFile); // write c to output
			}
			break;
		}
		case 2: //read and write
		{	
			size_t num;
			char buffer[BUFSIZ];

			while((num = read(fileno(inFile), buffer, BUFSIZ)) > 0) //fill buffer as long as still stuff in file
			{
				if(num!= write(fileno(outFile), buffer, num)) //write buffer
				{
					cout << "Error!!!!!";
					exit(1);
				}
			}
			break;
		}
		case 3: //fread and fwrite
		{

			size_t num;
			char buffer[BUFSIZ];
			
			//fread(void *ptr, size_t  size,  size_t  nitems,  FILE *stream)
			while((num = fread(buffer, sizeof(buffer[0]), BUFSIZ, inFile)) > 0) 
			{
				//size_t fread(void *ptr, size_t  size,  size_t  nitems,  FILE *stream)
				if(num!= fwrite(buffer, sizeof(buffer[0]), num, outFile))
				{
					cout << "Error!!!!!";
					exit(1);
				}
			}
			break;
		}
		case 4: //fseek and getc putc
		{
			lseek(fileno(outFile), 214, SEEK_SET);  // goto position 214 and write data starting there
			char c;
			while ((c = getc(inFile)) != EOF)  //same as getc putc above
			{
				putc(c , outFile);
			}
			break;
			break;
		}
		default:
		{
			cout << "That was not a valid option!" << endl;
			break;
		}

	}

	//close files
    fclose(inFile);
	fclose(outFile);

    return 0;
}
//******************************************

//parse command line args
void arg(int argc, char *argv[])
{
	for (int i = 1; i < argc; i++)
	{
	
		if (strcmp("-i", argv[i]) == 0)	// input file
		{
			fin_filename = argv[++i];
			cerr << "Input file: " << fin_filename << endl;
		}
		
		if (strcmp("-o", argv[i]) == 0)	// output file
		{
			use_file_out = true;
			use_screen_out = false;
			fout_filename = argv[++i];
			cerr << "Output file: " << fout_filename << endl;
		}
	}
}