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

检查C中是否存在具有部分名称的文件,c,file-exists,C,File Exists,我知道文件的目录,但我只有部分文件名。如何检查此文件是否存在于C 例如: /tmp/God_of_War 文件名实际上被称为: /tmp/God_of_War_PSP(USA).rar 这在portable C中是不可能的,因为C标准库没有用于枚举目录中的文件(然后自己进行匹配)的API,更不用说通过模式匹配文件名的API了。这是因为C早于现代层次目录的概念(甚至是1984年最早的Macintosh),并且因为C现在仍然支持这些系统(想想:微控制器) 实际上,您应该使用平台的文件系统API:

我知道文件的目录,但我只有部分文件名。如何检查此文件是否存在于C

例如:

/tmp/God_of_War
文件名实际上被称为:

/tmp/God_of_War_PSP(USA).rar

这在portable C中是不可能的,因为C标准库没有用于枚举目录中的文件(然后自己进行匹配)的API,更不用说通过模式匹配文件名的API了。这是因为C早于现代层次目录的概念(甚至是1984年最早的Macintosh),并且因为C现在仍然支持这些系统(想想:微控制器)

实际上,您应该使用平台的文件系统API:在类Unix/POSX系统(包括Linux)上使用
dirent.h
——针对您的问题,您应该使用
glob
函数:

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);
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
    }
}