检查文件是否存在,在 C 中区分大小写

check if file exists, case sensitive in C

在 Windows 上检查 C 中是否存在区分大小写的文件的好方法是什么?

我通过将文件名与文件名目录中的所有文件条目进行比较来实现这一点。 C语言有没有更高效的方法?

使用这个:

WIN32_FIND_DATAA FindFileData;
HANDLE h = FindFirstFile(filenametocheck, &FindFileData);

现在 FindFileData.cFileName 包含存储在 NTFS 中的文件名。

您只需将 filenametocheckFindFileData.cFileName 进行比较即可。

不要忘记用 FindClose(h) 关闭 h 句柄并进行错误检查。

这仅适用于检查当前目录,如果 filenametocheck 包含路径(例如 ..\somefile.txtC:\Somedir\Somefile.txt),您需要做更多的工作。

有关详细信息,请阅读 FindFirstFile and possibly look into this sample 的文档。

请注意,这可能会导致评论中提到的 TOCTOU bug,具体取决于您要实现的目标。