系统Win2000,FOPEN_MAX常数是50,现在需要同时打开200个文件,请问怎样解决?

解决方案 »

  1.   

    FOPEN_MAX是为了与ANSI兼容而设置的常量,与系统能打开的文件数无关,虽然我不知win2k能打开的最大文件个数,但200个是肯定没问题的,我的测试:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
      int i;
      char *path="E:\\temp\\tmp\\";
      FILE *fp[200];
      char name[50];
      for (i=0;i<200;i++)
      {
        sprintf(name,"%s%d",path,i);
        printf("%s\n",name);
        fp[i]=fopen(name,"w");
        if (fp[i]==NULL)
         {
          printf("error=%d\n",i);
          exit(1);
         } 
      }
      printf("ok\n");
      exit(0);
    }
      

  2.   

    其实问题出自BCB,问错地方了.....
    在VC的stdio里,缺省好像能打开512个文件(这个测试程序在我这里509开始出错),用_setmaxstdio()可以改变。
    但BCB里只能打开FOPEN_MAX个,还不知道怎么改....
      

  3.   

    BCB对底层的IO是有限止的,BCB底层的IO是有源码的,你可看一下:
    ...\Borland\CBuilder6\Source\Rtl\Source\io目录下的file.c及file2.c两个文件
    其中_NFILE_就是50,也是FOPEN_MAX的值
    (在stdio.h中#define FOPEN_MAX (_NFILE_))
    除非你把_NFILE_的值改变后重新对它的库文件进行编译.否则无法使用fopen打开50个以上文件(实际只能打开47个,因为有stdin,stdout,stderr)
    解决方法:
      1.不要同时打开
      2.用API的CreateFile代替fopen,实际上,fopen最终也是调用CreateFile的
      3.换编译器,VC或gcc都可支持50以上
    BCB本身的重点在界面设计,而且它更强调兼容性及移植性