gpt4 book ai didi

c - 如何测试无法访问的 'file'是否存在?

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

我在 char full_path[1000] 中存储了完整路径,我想知道该位置是否存在任何内容

(我的代码在此检查后要做的下一件事是在那个位置创建一些东西,但如果那里已经有东西,我希望它算作一个错误,而不是用 rm 的等价物清除该点 -射频)

该位置可能被文件或目录占用,或者甚至是指向某个不再存在的目标的链接,例如:

lrwxrwxrwx 1 user grp 4 Jun 16 20:02 a-link -> 不存在的东西

如果链接无效,access(full_path, F_OK) 会告诉我无法访问 full_path,这可能是因为 (1) 那里什么都不存在或者因为 (2) 链接无效。

鉴于此,确定 full_path 是否存在任何内容的最佳方法是什么?

最佳答案

您根本无法以明显的跨平台方式做到这一点。 stat()fopen() 将不起作用。不过,您可以使用操作系统 API,例如,在 Windows 上您可以使用 WinAPI 和示例代码:

int doesFileExist(TCHAR* path)
{
WIN32_FIND_DATA FindFileData;
HANDLE handle = FindFirstFile(path, &FindFileData) ;
int found = (handle != INVALID_HANDLE_VALUE);
if(found)
{
FindClose(handle);
}
return found;
}

如果您只想检查是否存在任何文件,查找任何文件(同样,使用 Windows API)也可以,您可以逐个目录检查它是否存在,如果不存在 - 返回错误。继续前进,直到到达目录,然后按上述方式检查特定文件。

假设你有 C:/Dir1/Dir2/Dir3/file.txt 然后你会先去 C:,然后检查 Dir1 存在,如果存在 - 如果它没有返回错误,则转到它。 Dir2 相同,依此类推,直到您到达最后一个目录并检查文件,或者如果您不检查某个文件和任何项目 - 只需尝试使用 MSDN 用于查找第一个文件或第一个目录。

关于c - 如何测试无法访问的 'file'是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877230/

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