मैं यह जांचने के लिए एक प्रोग्राम लिख रहा हूं कि कुछ फ़ाइल है या निर्देशिका है या नहीं। क्या इससे ऐसा करने का कोई बेहतर तरीका है?जांचना कि कोई फ़ाइल निर्देशिका है या सिर्फ एक फ़ाइल
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int isFile(const char* name)
{
DIR* directory = opendir(name);
if(directory != NULL)
{
closedir(directory);
return 0;
}
if(errno == ENOTDIR)
{
return 1;
}
return -1;
}
int main(void)
{
const char* file = "./testFile";
const char* directory = "./";
printf("Is %s a file? %s.\n", file,
((isFile(file) == 1) ? "Yes" : "No"));
printf("Is %s a directory? %s.\n", directory,
((isFile(directory) == 0) ? "Yes" : "No"));
return 0;
}
symlink मामलों पर विचार करते समय, stat() के बजाय lstat() का उपयोग करें क्योंकि यह symlink का पालन नहीं करता है। – Sparky
कम से कम एक अच्छी चर्चा है [जांच कर रहा है कि कोई निर्देशिका मौजूद है] (http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call/), जहां ' stat() 'और' lstat() 'पर चर्चा की जाती है, और POSIX फ़ाइल प्रकारों का पूरा सेट उल्लिखित है। मैं इस सवाल को उस पर डुप्लिकेट करने का लुत्फ उठा रहा हूं। कोड को 'stat()' के परिणाम की भी जांच करनी चाहिए, और त्रुटियों को उचित तरीके से संभालना चाहिए। –
@ जोनाथन, यह जवाब वास्तव में मेरे से अधिक पूर्ण है, और पांच साल पहले मेरे तीन महीने पहले पोस्ट किया गया था। और ऐसा नहीं है कि मेरा खुद का जवाब वैसे भी गायब हो जाएगा। मैं देखता हूं कि आप '[सी]' टैग में Mjölnir का प्रबंधन करते हैं, इसलिए एकतरफा अभिनय करने से पहले टिप्पणी करने के लिए धन्यवाद। हालांकि, आप अंत में सही हैं। कोई चिंता नहीं, आपको क्या करना है :) –