在C中按顺序打开超过4092个文件



我正在编写一个程序,从大约30000个文件中读取单词,但在4092次迭代后,我无法再读取新文件。我甚至尝试在循环结束时包含一个free(filePointer),但在尝试打开4092个文件后,我的文件指针仍然为NULL。任何想法或建议都将不胜感激。

int main(int argc, char *argv[]) {

  hashTable *bigramHT = create_table(100000000);
  hashTable *tokenHT = create_table(100000000);
  int numTokens = 0;
  /* file pointer */
  FILE *fp = NULL;
  /* directory pointer */
  DIR *dirp = NULL;
  /* pointer to directory struct */
  struct dirent *entry = NULL;
  /* check if directory exists and can be opened */
  if((dirp = opendir(argv[1])) == NULL){
    return 1;
  }
  /* allocate memory for the filename paths (using maximum possible length) */
  char *path;
  path = (char*)malloc((get_longest_filename(dirp) + strlen(argv[1])) * sizeof(char));
  if(path == NULL){
    return 1;
  }
  /* create buffers for 'window' to read in word pairs and initialize to  */
  char buffer1[1024];
  char buffer2[1024];
  char wordPair[sizeof(buffer1) + sizeof(buffer2) + 1];
  memset(wordPair, '', sizeof(wordPair));
  memset(buffer1, '', sizeof(buffer1));
  memset(buffer2, '', sizeof(buffer2));
  int iterations = 0;
  rewinddir(dirp); //make sure directory is at start position
  /* loop through directory */
  while((entry = readdir(dirp)) != NULL){  
     /* make sure filename is not a directory itself */
    if(is_dir(entry->d_name) == NULL){
      iterations++;
      /* attempt to open file */
      if((fp = fopen(strcat(strcat(strcat(path, argv[1]),"/"), entry->d_name), "r")) == NULL){
    printf("file not found: %s after %d iterationsn", entry->d_name, iterations);
    break;
    //return 1;
      }
      //printf("file: %sn", entry->d_name);
      while((fgets(buffer1, sizeof(buffer1), fp)) != NULL){
    numTokens++;
    //puts(remove_newline(buffer1));
    if(insert(tokenHT, remove_newline(buffer1)) != 0){
      return 1;
    }
    if(buffer2[0] != ''){
      /* merge words into one string */
      strcat(strcat(strcpy(wordPair, remove_newline(buffer2)), " "), remove_newline(buffer1));
      //printf("%sn", wordPair);
      /* insert new string into hash table */
      if(insert(bigramHT, wordPair) != 0){
        return 1;
      }
    }
    /* shift window */
    strcpy(buffer2, buffer1);
      }
      strcpy(path, "");
      memset(buffer2, '', sizeof(buffer2));
    }
  }
   printf("Total number of tokens = %dn", numTokens);
  //print(tokenHT);
  //print(bigramHT);
  delete_table(bigramHT);
  delete_table(tokenHT);
  closedir(dirp);
  free(path);;
  return 0;
} 

您没有fclose(fp);,因此文件句柄不足。

相关内容

  • 没有找到相关文章

最新更新