Tôi đang viết chương trình để kiểm tra xem tệp nào đó là tệp hay là thư mục. Có cách nào tốt hơn để làm điều đó hơn điều này?Kiểm tra xem tệp có phải là thư mục hay chỉ là một tệp
#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;
}
Khi xem xét các trường hợp liên kết tượng trưng, hãy sử dụng lstat() thay vì stat() vì nó không theo liên kết tượng trưng. – Sparky
Có ít nhất một cuộc thảo luận tốt tại [Kiểm tra xem một thư mục có tồn tại không] (http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call/), nơi ' stat() 'và' lstat() 'được thảo luận và tập hợp đầy đủ các loại tệp POSIX được phác thảo. Tôi bị cám dỗ lặp lại câu hỏi này cho câu hỏi đó. Mã nên kiểm tra kết quả của 'stat()', và xử lý các lỗi một cách thích hợp. –
@ Jonathan, câu trả lời đó thực sự hoàn chỉnh hơn tôi, và được đăng ba tháng trước tôi, năm năm trước. Và nó không giống như câu trả lời của riêng tôi sẽ biến mất anyway. Tôi thấy bạn sử dụng Mjölnir trong thẻ '[c]', vì vậy cảm ơn bạn đã bình luận trước khi hành động đơn phương. Tuy nhiên, cuối cùng bạn cũng đúng. Đừng lo, hãy làm những gì bạn phải làm :) –