簡體   English   中英

為什么 rename() 和 remove() 函數不起作用?

[英]Why rename() and remove() functions don't work?

如果我單獨使用此代碼(帶有主函數),它就可以工作。

但是當我在我的項目中包含這個函數時,它給出了兩個文件:

annuaire_client.txtannuaire1.txt

使用的代碼如下:

void delete_client(){
    FILE *annuaire_client,*annuaire1;
    printf("\t\t\t\t\t\t\t\tNum de compte a supprimee: ");

    int delete_line;
    scanf("%d",&delete_line);

    char ch;
    int  line = 1;

    //ouvrir le fichier original
    annuaire_client = fopen("annuaire_client.txt", "r");
    ch = getc(annuaire_client);

    //retour au debut
    rewind(annuaire_client);
    //ouvrir nouveau fichier
    annuaire1 = fopen("annuaire1.txt", "w");

    while (ch != EOF)
    {
        if (ch == '\n')
        {
            line++;
        }
        //sautez la line a supprimer
        if (line != delete_line)
        {
            //copier les lines vers annuaire1.txt
            fprintf(annuaire1,"%c",ch);
        }

        ch = getc(annuaire_client);
    }

    fclose(annuaire1);
    fclose(annuaire_client);
    remove("annuaire_client.txt");
    rename("annuaire1.txt","annuaire_client.txt");
}

您應該檢查 remove 和 rename 的返回值:

    if (remove("annuaire_client.txt") != 0) {
        /* handle error */
    }
    if (rename("annuaire1.txt","annuaire_client.txt") == -1) {
        /* handle error */
    }

許多可能性之一是您在調用 remove 時保持由 main 函數打開的描述符。 確保將所有fopenfclose配對,或者即使unlink / remove路徑,您的進程仍將保持(已刪除)描述符打開,如果達到為其分配的描述符限制,這可能會導致致命錯誤( fopen將失敗 - 這已經發生了我今天,所以這不是純人為的情況)。 還要記住,在無效指針上調用fclose是未定義的行為,即不是FILE* ,特別是在 NULL 上。

您可以嘗試檢查函數的結果代碼。 例如,對於rename功能,您可以使用一些代碼,例如:

   #include <errno.h>

(……)

   int ret;

   ret = rename("annuaire1.txt", "annuaire_client.txt");

   if(ret == 0) 
   {
      printf("File renamed successfully");
   }
   else 
   {
      printf("Error: unable to rename the file");
      fprintf(stderr, "System error (%d): %s\n", errno, strerror(errno);
   }

嘗試在 remove 函數中寫入文件的完整路徑,並在 rename 函數中寫入新名稱。 例如:

remove("C:\\Documents\\annuaire_client.txt");
rename("anuuaire1.txt","C:\\Documents\\annuaire_client.txt");

請記住使用 \\\\ 而不是 \\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM