Home > other >  Can't delete file within folder in C
Can't delete file within folder in C

Time:05-17

Im making a txt editor in the terminal, one of it's features is to edit a specific line. To do so,

I am creating a new temporary txt file, deleting the old/original one and renaming the temporary one to the original.

Here's the code:

FileLineEdit(char filename[20], int line, char newline[1000]){

    FILE * fp;
    FILE * fptmp;

    char buffer[1000];
    int count;

    int ret;


    fp  = fopen(filename, "r");
    fptmp = fopen("tmp/replace.txt", "w");

    if (fp == NULL || fptmp == NULL)
    {
        printf("\nErro!\n");
        exit(1);
    }

    count = 0;
    while ((fgets(buffer, 1000, fp)) != NULL)
    {
        count  ;

        if (count == line)
            fputs(newline, fptmp);
        else
            fputs(buffer, fptmp);
    }

    fclose(fp);
    fclose(fptmp);

    //strcat(fullpath, filename);
    //printf("%s", fullpath);

   ret = remove(filename);

   if(ret == 0) {
      printf("File deleted successfully");
   } else {
      printf("Error: unable to delete the file");
   }

    rename("tmp/replace.txt", "tmp/a.txt");

    getch();

}

The output is constantly: Error: unable to delete the file

btw once I try this outside the "tmp/" folder it works just fine

CodePudding user response:

The /tmp folder has the sticky bit (s) set, and that means, that anyone can read and create/modify files in it, but only its owner (root) can remove them.

So, if is what you want your program to do, you should do it in some directory other than /tmp

Also, as jarmod pointed out, you shouldn't have a hardcoded filename for your temporary filename. You should use tmpfile or tmpnam for this purpose: Instead of:

fptmp = fopen("tmp/replace.txt", "w");

Write:

fptmp = tmpfile();

The file will be automatically deleted when the file stream is closed.

(You can read a more about the /tmp dir here)

  •  Tags:  
  • c
  • Related