2014-12-03 81 views
3

我正試圖刪除我的C程序中的文件。所以我首先檢查文件是否存在,然後是否使用remove函數。這裏是我的代碼:刪除功能不起作用

if (!(f = fopen(position, "r"))) 
    { 
     system("cls"); 
     printf("User does not exist! Please enter the user again: "); 
    } 
    else 
    { 
     status = remove(position); 

     /*Check if file has been properly deleted*/ 
     if(status == 0) 
     { 
      printf("User deleted successfully.\n\n"); 
      break; 
     } 
     else 
     { 
      printf("Unable to delete the user\n"); 
     } 
    } 

當然,如果文件肯定存在,那麼刪除文件應該沒有問題。無論如何,這一小部分代碼不起作用。我剛剛得到返回"Unable to delete the user"

我也嘗試使用取消鏈接隨着導入unistd.h但沒有運氣。

我在做什麼錯?

+0

你可以試試'FCLOSE()'刪除之前,-ing? – 2014-12-03 11:58:52

+2

檢查* errno * remove()失敗後,這會給你一個提示什麼出了問題(權限問題等) – 2014-12-03 11:59:31

+0

@Himanshu你不需要打開文件,然後再刪除它。 – maxisme 2014-12-03 12:01:06

回答

4

檢查這個相關的question

如果必須刪除fopen() -ed路徑(文件),它會被刪除只有當你fclose()它。**

但我認爲,如果你只是要刪除的文件,而不只是之前使用它,請勿使用fopen,只需撥打remove函數即可。

**編輯:它甚至不知道,它是依賴於系統。

所以對於刪除文件的最好方法是做它調用刪除(path_of_file)當你沒有進行流式傳輸:

remove(path_of_file); 

,或者如果你需要打開文件:

fopen/open; 
(...) 
fclose/fclose; 
remove 
+0

「只有在你使用fclose()時纔會被刪除。」是不正確的。這是可以假設的,但我們不知道,因爲我們不知道他使用了什麼編譯器以及他在哪個系統上。正如你在我的回答中所看到的那樣,如果沒有這些信息,我們無法知道只有在它的'fclose()'編輯或者其他任何東西時纔會被刪除,因爲它是實現定義的。 – dhein 2014-12-03 12:32:35

0

您可以使用此代碼片段來刪除文件。首先檢查文件是否存在,然後嘗試刪除文件。

if(access(fname, F_OK) != -1) { 
    status = remove(position); 
     /*Check if file has been properly deleted*/ 
     if(status == 0){ 
      printf("User deleted successfully.\n\n"); 
     } 
     else{ 
      printf("Unable to delete the user\n"); 
     } 

} else { 
    // file doesn't exist 
printf("Sorry! file doesn't exist\n"); 
} 
1

從ISO/IEC9899

7.19.4.1 REMOVE功能

[...]

說明

2 REMOVE功能原因名稱是字符串的文件由文件名 指向不能再通過該名稱訪問。隨後嘗試使用該名稱打開該文件將失敗,除非它是重新創建的。 如果該文件處於打開狀態,則刪除 函數的行爲是實現定義的

只需閱讀標準可以幫助很多;)