gpt4 book ai didi

c - 如何检查特定目录中是否存在文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:48 24 4
gpt4 key购买 nike

我有检查文件是否存在的功能:

int file_exists(char *filename)
{
struct stat buffer;
int i = stat(filename, &buffer);
if (i == 0) {
return 1;
}
return 0;
}

它在完整路径下工作正常,但我想检查文件是否存在于用户主目录中,如果不存在 - 在/etc 目录中。怎么做?

最佳答案

int 
file_exists(const char *basename)
{
static const char *dirs[] = { "/etc", "/home/username" };
char buf[MAX_PATH_LENGTH + 1];
size_t i;
struct stat dummy;

for (i = 0; i < sizeof dirs / sizeof dirs[0]; ++i) {
(void)snprintf(buf, sizeof buf, "%s/%s", dirs[i], basename);
if (!stat(buf, &dummy)) return 1;
}

return 0;
}

请注意,如果路径加上文件名的长度超过 MAX_PATH_LENGTH 个字符,这将失败(即搜索错误的文件)。您可以检查 snprintf 的返回值来捕获它。

如果你想避免查找目录/套接字/...,你可以将 if 行更改为

if (!stat(buf, &dummy) && S_ISREG(dummy.st_mode)) return 1; 

正如亚当·罗森菲尔德所指出的。在这种情况下,您可能希望将 dummy 重命名为更合适的名称(可能是 sb)。

关于c - 如何检查特定目录中是否存在文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com