如何设计IF语句以使条件仅从目录中打印出特定类型的文件? (在正文中有更多解释)

时间:2018-10-09 20:42:55

标签: c search directory

从目前开始,如果您删除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;
}

旁注:基本上,我的想法是,我认为某些char持有较大的路径名称,例如“ folder / folder / folder / file.txt”,如果可以的话,基本上可以比较文件“ .txt”和“”。 txt”,那么它将被接受并打印到控制台中。

1 个答案:

答案 0 :(得分:0)

您不是从字符串的正确偏移处开始的。您要检查最后4个字符,所以从偏移量strlen(buf) - 4开始。

int len = strlen(buff);
if (strncmp(buff + len - 4, ".txt", 4) == 0) {