Как спроектировать оператор IF для условия, чтобы выводить только файл определенного типа из моего каталога?(Объяснил больше в теле) - PullRequest
0 голосов
/ 09 октября 2018

На данный момент, если вы удалите оператор 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 ", поэтому он будет принят и напечатан в консоли.

1 Ответ

0 голосов
/ 09 октября 2018

Вы не начинаете с правильного смещения строки.Вы хотите проверить последние 4 символа, поэтому начните со смещения strlen(buf) - 4.

int len = strlen(buff);
if (strncmp(buff + len - 4, ".txt", 4) == 0) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...