gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:23 24 4
gpt4 key购买 nike

我正在编写一个程序来读取大约 30,000 个文件中的单词,但在第 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 \0 */
char buffer1[1024];
char buffer2[1024];
char wordPair[sizeof(buffer1) + sizeof(buffer2) + 1];
memset(wordPair, '\0', sizeof(wordPair));
memset(buffer1, '\0', sizeof(buffer1));
memset(buffer2, '\0', 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 iterations\n", entry->d_name, iterations);
break;
//return 1;
}
//printf("file: %s\n", 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] != '\0'){
/* merge words into one string */
strcat(strcat(strcpy(wordPair, remove_newline(buffer2)), " "), remove_newline(buffer1));
//printf("%s\n", wordPair);
/* insert new string into hash table */

if(insert(bigramHT, wordPair) != 0){
return 1;
}

}
/* shift window */
strcpy(buffer2, buffer1);
}
strcpy(path, "");
memset(buffer2, '\0', sizeof(buffer2));
}
}

printf("Total number of tokens = %d\n", numTokens);
//print(tokenHT);
//print(bigramHT);
delete_table(bigramHT);
delete_table(tokenHT);
closedir(dirp);
free(path);;

return 0;
}

最佳答案

您没有 fclose(fp);,所以文件句柄用完了。

关于c - 在 C 中顺序打开超过 4092 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15001991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com