2010-01-17 131 views
2

嗨,大家好,我對C相對陌生,所以如果這是一個愚蠢的問題,請原諒我,但我該如何檢查FILE是否是目錄?我有如何檢查一個目錄是否存在C

if (file == NULL) { 
    fprintf(stderr, "%s: No such file\n", argv[1]); 
    return 1; 
} 

並檢查節點是否存在,但我想知道它是否是目錄或文件。 我做了一些google搜索,我無法找到答案:\

感謝,

-Aaron

回答

6

文件名本身不攜帶任何信息,他們是否存在與否,或者是否是一個目錄與他們 - 有人可以改變它從你的下面。你想要做的是運行一個庫調用,即stat(2),如果該文件存在或不存在以及它是什麼,則返回報告。從手冊頁,

[ENOENT]   The named file does not exist. 

所以有一個錯誤代碼報告(在errno中)該文件不存在。如果它確實存在,你可能希望檢查它實際上是一個目錄而不是一個普通的文件。您可以通過在返回的結構中檢查st_mode來執行此操作:

The status information word st_mode has the following bits: 
... 
#define  S_IFDIR 0040000 /* directory */ 

檢查聯機幫助頁以獲取更多信息。

+1

考慮到你的答案,我發現在Linux手冊頁的S_ISDIR「宏觀」(特別是不OS X的手冊頁我一直在檢查,雖然它適用於兩者)利用ST_MODE。我不知道這是否是你的意思,但它是有效的,所以我很好;) – 2010-01-17 14:14:14

+1

'S_ISDIR'宏比S_IFDIR'標誌更受歡迎,因爲後者可能會出現一些細微的問題。 – roguesys 2011-04-14 01:39:39

4

使用執行opendir嘗試打開它作爲一個目錄。如果將返回一個空指針它顯然不是一個目錄:)

下面是你的問題的一個片段:

#include <stdio.h> 
    #include <dirent.h> 

    ... 

    DIR *dip; 
    if ((dip = opendir(argv[1])) == NULL) 
    {   
    printf("not a directory"); 
    } 
    else closedir(dip); 
0

如果您使用* nix,stat()。

6
struct stat st; 
if(stat("/directory",&st) == 0) 
     printf(" /directory is present\n"); 
相關問題