嗨,大家好,我對C相對陌生,所以如果這是一個愚蠢的問題,請原諒我,但我該如何檢查FILE是否是目錄?我有如何檢查一個目錄是否存在C
if (file == NULL) {
fprintf(stderr, "%s: No such file\n", argv[1]);
return 1;
}
並檢查節點是否存在,但我想知道它是否是目錄或文件。 我做了一些google搜索,我無法找到答案:\
感謝,
-Aaron
嗨,大家好,我對C相對陌生,所以如果這是一個愚蠢的問題,請原諒我,但我該如何檢查FILE是否是目錄?我有如何檢查一個目錄是否存在C
if (file == NULL) {
fprintf(stderr, "%s: No such file\n", argv[1]);
return 1;
}
並檢查節點是否存在,但我想知道它是否是目錄或文件。 我做了一些google搜索,我無法找到答案:\
感謝,
-Aaron
文件名本身不攜帶任何信息,他們是否存在與否,或者是否是一個目錄與他們 - 有人可以改變它從你的下面。你想要做的是運行一個庫調用,即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 */
檢查聯機幫助頁以獲取更多信息。
使用執行opendir嘗試打開它作爲一個目錄。如果將返回一個空指針它顯然不是一個目錄:)
下面是你的問題的一個片段:
#include <stdio.h>
#include <dirent.h>
...
DIR *dip;
if ((dip = opendir(argv[1])) == NULL)
{
printf("not a directory");
}
else closedir(dip);
如果您使用* nix,stat()。
struct stat st;
if(stat("/directory",&st) == 0)
printf(" /directory is present\n");
考慮到你的答案,我發現在Linux手冊頁的S_ISDIR「宏觀」(特別是不OS X的手冊頁我一直在檢查,雖然它適用於兩者)利用ST_MODE。我不知道這是否是你的意思,但它是有效的,所以我很好;) – 2010-01-17 14:14:14
'S_ISDIR'宏比S_IFDIR'標誌更受歡迎,因爲後者可能會出現一些細微的問題。 – roguesys 2011-04-14 01:39:39