在BCB中用C库的fopen只能同时创建47个文件?

liskman 2006-07-06 01:54:00

偶然发现在BCB6和C++Builder2006中使用标准C库只能同时打开47个文件。
测试代码:

#include <stdio.h>

////////////////////////////////////////////////
FILE * iFile[100];
int i;
char szName[260];

for( i=0; i<100; i++ ){
sprintf(szName, "D:\\TEST%02d.DAT", i);
iFile[i] = fopen(szName, "w+b");
}

for( i=0; i<100; i++ ){
fclose(iFile[i]);
}
////////////////////////////////////////////////

相同的代码在VC中没有问题,可以创建100个空文件。在BCB6和C++Builder2006使用FileCreate也没有问题,可以正常创建100个文件。


在<stdio.h> 看到 #define FOPEN_MAX (_NFILE_)
在<_nfile.h> 看到 #define _NFILE_ 50


在VC的<stdio.h>则找到#define FOPEN_MAX 20 ???!!!!!!!!!
怎么回事?
...全文
295 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2006-07-08
  • 打赏
  • 举报
回复
BCB有一头文件_nfile.h,它有一个宏:
#define _NFILE_ 50
另外在stdio.h中:
#if defined(__STDC__)
#define FOPEN_MAX (_NFILE_)
#else
#define FOPEN_MAX (_NFILE_)
#define SYS_OPEN (_NFILE_)
#endif
也就是说,BCB的fopen最多只能打开50个文件,而去掉系统的stdio/stdout/stderror,BCB只能打开47个问题,这个问题以前有人问过,解决方法忘了
liskman 2006-07-08
  • 打赏
  • 举报
回复
也是测试项目的一个模块功能时遇到的问题,本来是要向网络的客户端发送数据,为调试方便暂时将数据定向到文件,结果就发现了这个问题。

没有找到在BCB中增加标准C库并发打开文件数的方法,现在只有用FileCreate或WindowsAPI解决问题。
jixingzhong 2006-07-07
  • 打赏
  • 举报
回复
VC 中确实是默认可以打开 20 个文件的,
不过这个可以通过修改一些选项改变 ...

记得 DOS 下也是 20 吧 ...

其中还包括了 默认的 5 个标准文件,
所以 ...
zzq4823 2006-07-07
  • 打赏
  • 举报
回复
真没遇到过,偶做的项目最多也就打开6~7个文件
shadowstar 2006-07-07
  • 打赏
  • 举报
回复
呵呵,好玩。
dgyanyong1 2006-07-07
  • 打赏
  • 举报
回复
试了一下 果然是47个
但不知道是为什么
huzhangyou 2006-07-06
  • 打赏
  • 举报
回复
这个真没有研究过
你真正有这个需求吗?
还是就想玩玩?
starwlj 2006-07-06
  • 打赏
  • 举报
回复
有可能吧,没试过
xiaoshi0 2006-07-06
  • 打赏
  • 举报
回复
没有遇到过

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧