readdir
可用於獲取目錄的條目。
以下searchFirstDir
找到第一個前綴匹配的目錄。 (在Ubuntu Linux操作系統測試)
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
int searchFirstDir(const char *workingDir, const char *prefix, char *resultBuffer, int bufferLen)
{
DIR *pDir = NULL;
int found = 0;
// opendir
{
pDir = opendir(workingDir);
if (pDir == NULL) {
perror("ERROR: opendir");
return -1;
}
}
// readdir
{
int ret;
struct dirent *pEntry;
struct dirent *result;
int prefixLen = strlen(prefix);
// refer: man readdir (in Linux)
{
long name_max = pathconf(workingDir, _PC_NAME_MAX);
if (name_max == -1) /* Limit not defined, or error */
name_max = 255; /* Take a guess */
size_t len = offsetof(struct dirent, d_name) + name_max + 1;
pEntry = malloc(len);
}
do {
ret = readdir_r(pDir, pEntry, &result);
if (ret) {
perror("ERROR: readdir_r");
break;
}
if (pEntry->d_type == DT_DIR && strncmp(pEntry->d_name, prefix, prefixLen) == 0) {
strncpy(resultBuffer, pEntry->d_name, bufferLen);
found++;
break;
}
} while(ret == 0 && result != NULL);
free(pEntry);
}
// closedir
closedir(pDir);
return found > 0 ? 0 : -1;
}
int main(int argc, char *argv)
{
char resultBuffer[255];
int ret = searchFirstDir("workingdirectory", "TestDir", resultBuffer, 255);
if (ret == 0) {
printf("First matched directory: %s\n", resultBuffer);
}
}
我想你將不得不在父目錄中的文件上使用'strncmp'手動搜索前綴匹配。 – merlin2011
調試無法保留進程標識的代碼似乎很合適。我認爲這個問題的這個部分也是。它(在我看來)仍然是一個關於編碼的清晰而單一的問題。所以考慮製作一個顯示兩個部分的[mcve]。答案可能基於查找ID問題或改進您擁有的目錄名稱的嘗試。如果這個(我的評論)得到了抵觸,請提出第二個問題。 – Yunnosch
在Linux中使用['glob'](https://linux.die.net/man/3/glob)查找您感興趣的路徑。 – kaylum