ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel
  • »
  • Technology»
  • Computers & Software»
  • Computer Science & Programming

How to do Data Processing and File Operations in C/C++

Updated on November 18, 2013

There are different ways to handle a file in C/C++. When we do file operation in C/C++, we include stdio.h and program begins with defining the file pointer.

typedef struct
{
       int level;
       unsigned flags;
       char fd;
       unsigned char hold;
       int bsize;
       unsigned char far *buffer;
       unsigned char far *curp;
       unsigned istemp;
       short token;
} FILE;

FILE *fopen(const char *filename,const char *mode);

If you are a beginner in c++ try this book.

You can open the file in different modes using fopen()

  1. "r" (read-only): Open the text file in read-only mode. If the specified file does not exist, the program throws an exception.
  2. "w" (write-only): Open the text file in write-only mode. If the file does not exist, the program creates a new file with the specified name. If the file already exists, the program overwrites the file with the contents and starts inserting the characters from starting of the file.
  3. "rb" (read-only): Open the binary file in read-only mode.
  4. "wb" (write-only): Open the binary file in write-only mode.
  5. "a" (append): Open the text file for appending the data. If the file does not exist, create a new file with the specified name. If the file already exists, the program starts writing the contents in the end of the file.
  6. "ab" (append): Open the binary file in append mode.
  7. "r+" (read and write): Open the text file in read/write mode. Read and write always starts from the beginning of the file. In write mode it overwrites the existing file and create a new file if file does not exist.
  8. "rb+" (read and write): Open the binary file in read/write mode. Read and write always starts from the beginning of the file. In write mode it overwrites the existing file and create a new file if file does not exist.
  9. "w+" (read and write): Open the text file in read/write mode. The only difference is that using w+ opens the file in append mode and always starts writing in the end of the file. It will never overwrite the file.
  10. "wb+" (read and write): Open the binary file in read/write mode. The only difference is that using wb+ opens the file in append mode and always starts writing in the end of the file. It will never overwrite the file.
  11. "a +" (read and write): Open the text file in read/write mode. Using this mode you can add content without over writing the file.
  12. "ab+" (read and write): Open the binary file in read/write mode. You can read and write the binary file from any specific position you want.

This function returns a FILE pointer. It is not necessary to initialize a FILE pointer while using fopen().

Example of fopen()

FILE *fp;
if( fp=fopen("filename.txt","r") == NULL)
{
     printf("File does not exist!/n");
     exit(0);
}

Using fgetc()

int fgetc(FILE *stream);

fgetc() reads the file character by character from file pointer and each time moves the cursor position by one byte. The return value of this function is one character. It returns EOF when it reaches at the end of the file.

char ch1= fgetc (fp);

Using fgets()

char *fgets(char *buf, int bufsize, FILE *stream);

*buf: A character pointer, points to the address use to store the data.

bufsize: Integer type, specify the size of buffer pointing to the array of characters.

*stream: Pointer to file structure.

Struct pointer in the stream is used to read the data from a file line by line. Reads the data in the buffer, if the characters in the line is less than bufsize, then it reads the line till end and successfully returns buf. On error it returns NULL. So we can determine if functions has returned error, EOF or buf.

Using fscanf()

int fscanf(FILE *stream, char *format,[argument...]);

FILE *stream: Pointer to the file

char *format: String format

[argument ...] : List of arguments passed by user.

Reads the file from stream, format the input and then save the result in accordance with the format in the list of arguments. fscanf() encounters a space and newline at the end.

FILE *filepointer = 0;
char tempfile[255] = {0};
filepointer = fopen (argv[1],"r+");
while (EOF != fscanf(filepointer,"%*[^','],\"%*[^','],%[^','],%*s",tempfile))
{
     sscanf (tempfile,"\"%s\"",tmp1);
     printf ("%d\n",atoi(tmp1));
}

Using fwrite()

size_t fwrite (const void* buffer, size_t size, size_t count, FILE* stream);

FILE *stream;
struct mystruct s;
if ((stream = fopen("file.txt", "wb")) == NULL)
{
    fprintf (stderr, "Can not open the file.\n");
    return 1;
}
s.i = 0;
s.cha = 'A';
fwrite (&s, sizeof(s), 1, stream);

Using fprintf()

int fprintf (FILE *stream,char *format,[argument]);

Printf is the standard output stream that sends the output on the screen. Similarly fprintf function sends the output to the file. fprintf() returns a value as a number of characters in output. It returns a negative value if encounters any error.

char s[] = "Some string";
char c = '\n';
stream = fopen ( "fprintf.out", "w" );
fprintf ( stream, "%s%c", s, c );
fprintf ( stream, "%d\n", i );
fprintf ( stream, "%f\n", fp );

Using sscanf()

int sscanf (const char *buffer,const char *format,[argument ]...);

sscanf ("abcsfl;qweog","%[1-9A-Z]",buf);
sscanf ("saklhgew@erlk45", "%*[^/]/%[^@]", buf);
printf ("%s\n", buf);

Using getline()

ssize_t getline( char **lineptr, size_t *n, FILE *stream);

FILE *fp;
char *line = NULL;
size_t len = 0;
ssize_t read;
 
if (!(fp=fopen("file.txt","r")))
{
      printf ("\ncan not open the file!\n");
      exit (1);
}
while ((read = getline(&line, &len, fp)) != -1);

Comments

    0 of 8192 characters used
    Post Comment

    • profile image

      Abhishek 3 years ago

      thanks for the sample codes.