2010-08-22 73 views
1

我試圖做一個簡單的程序,處理文件和目錄,但我有兩個主要問題:如何找出文件或目錄是否存在?

  • 我怎麼能檢查文件或目錄是否存在,以及
  • 我怎麼知道如果它是一個文件,目錄,符號鏈接,設備,命名管道等?目前主要是文件和目錄,但我也想知道其他人。

編輯:過所有那些誰是建議使用stat()或類似的功能,我已經看過成,雖然它可能會回答我的第一個問題,我想不出它會如何回答第二...

+0

你在運行什麼操作系統? – Starkey 2010-08-22 20:29:44

+0

@Starkey Linux。 – Frxstrem 2010-08-22 20:31:09

回答

6

既然你詢問命名管道/符號鏈接等等,你可能在* nix,所以使用 lstat()功能

struct stat info; 

if(lstat(name,&info) != 0) { 
    if(errno == ENOENT) { 
    // doesn't exist 
    } else if(errno == EACCES) { 
    // we don't have permission to know if 
    // the path/file exists.. impossible to tell 
    } else { 
     //general error handling 
    } 
    return; 
} 
//so, it exists. 

if(S_ISDIR(info.st_mode)) { 
    //it's a directory 
} else if(S_ISFIFO(info.st_mode)) { 
    //it's a named pipe 
} else if(....) { 
} 

Se文檔here爲您可以使用的S_ISXXX宏。

+0

謝謝,這正是我所尋找的:D – Frxstrem 2010-08-22 20:42:14

2

stat()函數應該給你你正在尋找的一切(或更具體地lstat()因爲stat()將遵循鏈接)。

1

使用stat(或者,如果你希望獲得關於符號鏈接的信息,而不是跟隨它和獲取有關目標的信息,lstat

NAME

統計 - 獲取文件狀態

概要

#include <sys/stat.h> 

int stat(const char *restrict path, struct stat *restrict buf); 

說明

stat()函數將獲取有關指定文件的信息並將其寫入buf參數指向的區域。 path參數指向命名文件的路徑名。不需要讀取,寫入或執行指定文件的權限。提供額外或替代文件訪問控制機制的實現可能會在實現定義的條件下導致stat()失敗。特別是,系統可能會拒絕路徑指定的文件的存在。

如果命名文件是符號鏈接,則stat()函數將繼續使用符號鏈接的內容路徑名解析,並應退回有關生成的文件,如果文件存在的信息。

buf參數是一個指向stat結構的指針,正如在頭文件中定義的那樣,其中放置了關於該文件的信息。

相關問題