检查文件是否存在C中的部分名称

时间:2018-06-14 00:18:40

标签: c file-exists

我知道文件的目录,但我只有部分文件名。如何检查 C

中是否存在此文件

例如:

/tmp/God_of_War

实际上调用了文件名:

/tmp/God_of_War_PSP(USA).rar

1 个答案:

答案 0 :(得分:1)

这在便携式C中是不可能的,因为C标准库没有用于枚举目录中的文件的API(然后自己匹配它们),更不用说用于通过模式匹配文件名的API。这是因为C早于分层目录的现代概念(即使是1984年的原始Macintosh didn't support subdirectories) - 并且因为C今天仍然支持这些系统(想想:微控制器)。

在实践中,您使用平台的文件系统API:在类似Unix的/ POSX系统上,包括使用dirent.h完成的Linux - 并且特别针对您的问题&# 39; d使用glob函数:http://pubs.opengroup.org/onlinepubs/009604499/basedefs/glob.h.html

glob_t result;
const int ok = glob( "/tmp/God_of_War*", /*flags:*/ 0, /*errfunc:*/ NULL, &result );
if( 0 == ok ) {
    for( size_t i = 0; i < result.gl_pathc; i++ ) {
        puts( result.gl_pathv[i] );
    }
}
else {
    // error
}
globfree( &result);

在Windows上,您可以使用通配符的FindFirstFileFindNextFile,就像glob一样。

WIN32_FIND_DATA result;
HANDLE searchHandle = FindFirstFile( "God_of_War*", &result);
if( searchHandle == INVALID_HANDLE_VALUE ) {
    // handle error, use GetLastError() for details
}
else {
    do {
        puts( searchHandle.cFileName );
    }
    while( FindNextFile( searchHandle, &searchHandle ) );
    DWORD lastError = GetLastError();
    if( lastError != ERROR_NO_MORE_FILES ) {
        // handle error
    }
}