怎样更改Windows的最大同时打开文件数? 系统Win2000,FOPEN_MAX常数是50,现在需要同时打开200个文件,请问怎样解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);} 其实问题出自BCB,问错地方了.....在VC的stdio里,缺省好像能打开512个文件(这个测试程序在我这里509开始出错),用_setmaxstdio()可以改变。但BCB里只能打开FOPEN_MAX个,还不知道怎么改.... 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本身的重点在界面设计,而且它更强调兼容性及移植性 CEvent的setEvent方法到底起什么作用? 问个最简单的有关MessageBox的问题?程序为什么编译没有错误,而运行就出现两个错误,为什么??? 关于Mutex权限的问题 一个小小问题 谁帮看看这个信息是什么意思,程序可能在哪方面有问题? 急需visual studio 7.0英文版 用WinInet怎样得到要下载链接的文件名称??? OLE读取ELCLE格式化输出到文本文件? 超cool问题-语法关键字显示 深入浅出问题之P335 怎么在框架函数中得到视图的子窗口指针 VS.net安装问题?
#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);
}
在VC的stdio里,缺省好像能打开512个文件(这个测试程序在我这里509开始出错),用_setmaxstdio()可以改变。
但BCB里只能打开FOPEN_MAX个,还不知道怎么改....
...\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本身的重点在界面设计,而且它更强调兼容性及移植性