На данный момент, если вы удалите оператор IF if(strncmp(strup(buff,len) + len - 4, ".txt", 4) == 0)
, код распечатает все файлы в моем текущем каталоге и каталогах в текущем каталоге и т. Д. Однако я хочу создать оператор IF таким образом, чтобы я печатал толькоиз файлов, которые я выбираю, в приведенном ниже примере я попытался распечатать только «.txt», но, как говорится, я не могу понять, как правильно спроектировать условие.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define sizeFileName 500
#define filesMax 5000
int main( int argc, char ** argv) {
FILE * fp = popen( "find . -type f", "r");
char buff[sizeFilesName];
int nFiles = 0;
char * files[filesMax];
while(fgets(buff,sizeFileName,fp)) {
int len = strlen(buff) - 1;
if(strncmp(strup(buff,len) + len - 4, ".txt", 4) == 0){
files[nFiles] = strndup(buff,len);
printf("\t%s\n", files[nFiles]);
nFiles ++;
}
}
fclose(fp);
printf("Found %d files:\n", nFiles);
// clean up
for(int i = 0; i < nFiles ; i ++ ) {
free(files[i]);
}
return 0;
}
SIDENOTE: По сути, моя идея состоит в том, что я полагаю, что какой-то символ содержит большое имя пути, например, «папка / папка / папка / файл.txt», и, если можно, сравнение файлов ".txt "и" .txt ", поэтому он будет принят и напечатан в консоли.