簡體   English   中英

C檢查文件是否存在

[英]C check if file exists

在我必須在C89標准中執行的項目中,我必須檢查文件是否存在。 我該怎么做呢?

我想過要用

FILE *file;
if ((file = fopen(fname, "r")) == NULL)
{
  printf("file doesn't exists");
}
return 0;

但我認為可能有更多的情況,然后文件不存在,將執行fopen == NULL。

我該怎么做呢? 我寧願不使用包含而不是。

如果您不能在您的環境中使用stat()(這絕對是更好的方法),只需評估errno。 別忘了包含errno.h。

FILE *file;
if ((file = fopen(fname, "r")) == NULL) {
  if (errno == ENOENT) {
    printf("File doesn't exist");
  } else {
    // Check for other errors too, like EACCES and EISDIR
    printf("Some other error occured");
  }
} else {
  fclose(file);
}
return 0;

編輯:忘了將fclose包裝成else

這是不可能的,以檢查是否存在於純ISO標准C.有沒有真正的好移植的方法來確定一個指定的文件是否存在一定的 ; 你可能不得不求助於系統特定的方法。

這不是一個便攜式的東西,所以我會給你特定於操作系統的電話。

在Windows中,您使用GetFileAttributes並檢查-1返回( INVALID_HANDLE或類似的東西)。

在Linux中,你有fstat這樣做。

然而,大多數時候,我只是做文件打開技巧來測試,或者只是繼續使用該文件並檢查異常(C ++ / C#)。

你真的想要訪問該文件嗎? 對於來自<unistd.h>access(filename,F_OK)==0檢查通常更好,我認為這是一個相當廣泛的標准。

我想這與系統環境(如POSIX或BSD)有關,而不是與您使用的C語言版本有關。

在POSIX中有一個stat()系統調用,它將為您提供有關文件的信息,即使您無法讀取它。 但是,如果文件位於您沒有訪問權限的路徑中,則無論文件是否存在,該文件始終都會失敗。

如果您無法訪問該路徑,則永遠不可能查看包含的文件。

暫無
暫無

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

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