C program to remove specific line from a file

Quick links

Write a C program to remove a given line from a file. How to remove a given line from a text file in C programming. Logic to remove specific line from a file in C program.

In previous post I explained to remove a word from file. In this post we will continue further and will learn to remove a given line from file. Logic to remove word or line from a file are alike. So, lets get started and code it.

Required knowledge

Basic Input Output, Pointers, Strings, Functions, File Handling

Logic to remove specific line from a file

Step by step descriptive logic to remove a given line from file.

  1. Input file path and line number to remove from user. Store it in some variable say path and line.
  2. Open file in r (read) mode, store its reference in srcFile.
  3. Create and open a temporary file in w (write) mode. Store its reference in tempFile.
  4. Initialize a count = 1 variable to keep track of current line number of source file.
  5. Read a line from source file srcFile. Store it in some variable say buffer.
  6. If current line number is not equal to line to remove i.e. if(line != count) then write buffer to tempFile.
  7. Increment count++.
  8. Repeat step 5-7 till end of source file.
  9. Close both files i.e. srcFile and tempFile.
  10. Delete our original source file srcFile.
  11. Rename temporary file with source file path.

I have used functions for this program, since it provides modularity. I have created two functions deleteLine() and printFile() to delete a given line and print a given file on console.

Program to remove specific line from a file

/**
 * C program to delete specific line from a file.
 */

#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 1000

/* Function declarations */
void deleteLine(FILE *srcFile, FILE *tempFile, const int line);
void printFile(FILE *fptr);


int main()
{
    FILE *srcFile;
    FILE *tempFile;

    char path[100];

    int line;


    /* Input file path and line number */
    printf("Enter file path: ");
    scanf("%s", path);

    printf("Enter line number to remove: ");
    scanf("%d", &line);


    /* Try to open file */
    srcFile  = fopen(path, "r");
    tempFile = fopen("delete-line.tmp", "w");


    /* Exit if file not opened successfully */
    if (srcFile == NULL || tempFile == NULL)
    {
        printf("Unable to open file.\n");
        printf("Please check you have read/write previleges.\n");

        exit(EXIT_FAILURE);
    }



    printf("\nFile contents before removing line.\n\n");
    printFile(srcFile);


    // Move src file pointer to beginning
    rewind(srcFile);

    // Delete given line from file.
    deleteLine(srcFile, tempFile, line);


    /* Close all open files */
    fclose(srcFile);
    fclose(tempFile);


    /* Delete src file and rename temp file as src */
    remove(path);
    rename("delete-line.tmp", path);


    printf("\n\n\nFile contents after removing %d line.\n\n", line);

    // Open source file and print its contents
    srcFile = fopen(path, "r");
    printFile(srcFile);
    fclose(srcFile);

    return 0;
}


/**
 * Print contents of a file.
 */
void printFile(FILE *fptr)
{
    char ch;

    while((ch = fgetc(fptr)) != EOF)
        putchar(ch);
}



/**
 * Function to delete a given line from file.
 */
void deleteLine(FILE *srcFile, FILE *tempFile, const int line)
{
    char buffer[BUFFER_SIZE];
    int count = 1;

    while ((fgets(buffer, BUFFER_SIZE, srcFile)) != NULL)
    {
        /* If current line is not the line user wanted to remove */
        if (line != count)
            fputs(buffer, tempFile);

        count++;
    }
}

Output

Enter file path: data\file3.txt
Enter line number to remove: 2

File contents before removing line.

I love programming.
I am learning C programming at Codeforwin.
Programming with files is fun.
Learning C programming at Codeforwin is simple and easy.



File contents after removing 2 line.

I love programming.
Programming with files is fun.
Learning C programming at Codeforwin is simple and easy.

Happy coding 😉

About Pankaj

Pankaj Prakash is the founder, editor and blogger at Codeforwin. He loves to learn new techs and write programming articles especially for beginners. He works at Vasudhaika Software Sols as a Software Design Engineer and manages Codeforwin. In short Pankaj is Web developer, Blogger, Learner, Tech and Music lover.

Follow on: Facebook | Twitter | Google | or

Comments and discussion
Have a doubt, write here. I will help my best.
Before commenting you must escape your source code before commenting. Paste your source code inside
<pre><code> ----Your Source Code---- </code></pre>