Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 遍历文件目录并将每一行读入数组_C_Linux - Fatal编程技术网

C 遍历文件目录并将每一行读入数组

C 遍历文件目录并将每一行读入数组,c,linux,C,Linux,我想知道将文件目录逐行读取到数组中最有效的方法是什么。我的任务是在一个目录中搜索以某个扩展名结尾的文件,并将该文件的每一行中应该只包含每一行上的整数读入一个一维数组。然后移动到下一个文件,并将该文件的每一行添加到现有数组中。我在看,并在想,我可以修改约翰尼斯的例子,以适应我的情况。提前谢谢 编辑: 当我说我在内存分配方面效率很高时,我向大家道歉。而且它必须是c。我已经添加了家庭作业标签,并将研究glob上的手册页。我会回来报到的 如果我是正确的,那么任务是收集一组具有某个扩展名的文件中每行上的数

我想知道将文件目录逐行读取到数组中最有效的方法是什么。我的任务是在一个目录中搜索以某个扩展名结尾的文件,并将该文件的每一行中应该只包含每一行上的整数读入一个一维数组。然后移动到下一个文件,并将该文件的每一行添加到现有数组中。我在看,并在想,我可以修改约翰尼斯的例子,以适应我的情况。提前谢谢

编辑:


当我说我在内存分配方面效率很高时,我向大家道歉。而且它必须是c。我已经添加了家庭作业标签,并将研究glob上的手册页。我会回来报到的

如果我是正确的,那么任务是收集一组具有某个扩展名的文件中每行上的数字

迭代文件可以通过多种方式完成,匹配文件扩展名也可以。向数组中添加未知数量的元素也是如此

根据我对问题的理解,以下是一个建议的解决方案:

#include <stdio.h>
#include <stdlib.h>
#include <glob.h>

int main(int argc, char *argv[])
{
  char pattern[] = "/tmp/*.txt";
  glob_t globbuf;
  FILE *file;
  int i, num, n = 0, max = 10;
  int *numbers = malloc(sizeof(int) * max);

  glob(pattern, 0, NULL, &globbuf);

  for (i = 0; i < globbuf.gl_pathc; i++)
  {
    if ((file = fopen(globbuf.gl_pathv[i], "r")) != NULL)
    {
      while (fscanf(file, "%d\n", &num) == 1)
      {
        numbers[n] = num;
        n++;

        if (n >= max)
        {
          max = max * 2;
          numbers = realloc(numbers, sizeof(int) * max);
        }
      }
      fclose(file);
    }
  }

  globfree(&globbuf);

  printf("Collected numbers:\n");

  for (i = 0; i < n; i++)
  {
    printf("%d\n", numbers[i]);
  }

  free(numbers);

  return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
字符模式[]=“/tmp/*.txt”;
glob_t globbuf;
文件*文件;
int i,num,n=0,max=10;
整数*数字=malloc(sizeof(整数)*最大值);
glob(模式、0、NULL和globbuf);
对于(i=0;i=最大值)
{
max=max*2;
数字=realloc(数字、大小(整数)*最大值);
}
}
fclose(文件);
}
}
globfree(&globbuf);
printf(“收集的号码:\n”);
对于(i=0;i

使用
glob
功能,可以在一次操作中找到文件并匹配正确的扩展名。每次空间用完时,数字都会被收集到一个动态分配的数组中,数组的大小是原来的两倍,使用
realloc

我不太明白这个问题。您是在扫描目录层次结构中的文件,还是在扫描文件中的文本?如果是prior,那么我建议您看看“glob”函数(“man 3 glob”)。如果是后者,那么您已经走上了正确的轨道(并且可能希望研究“strstr”函数和其他函数)。对您实际想要做的事情进行进一步的阐述可能会得到更准确的答案。在程序员时间、执行时间、执行空间等方面效率最高?“最有效”需要进一步澄清。