使用fopen增加Windows中Matlab中打开文件描述符的最大数量

twe*_*ter 4 matlab fopen file

我有一个程序需要在Matlab中保存大约3000个打开的文件描述符.这样做的原因是,如果我不打开它们,我需要打开和关闭它们超过10万次,这意味着3亿次开放式关闭操作.考虑到每个文件被附加每次和的fopen和FCLOSE可以向上的第二各自的采取(文件较大即100MB +)应该很清楚这种情况是不能接受的.

我知道文件句柄的Windows限制设置为10000,但Matlab拒绝使用fopen打开超过512个文件.我无法弄清楚如何强迫它增加这个数字.

有人知道如何更改512限制吗?它在哪里定义?它甚至与Matlab有关吗?

Pur*_*uit 6

FWIW,下面是一些重现此问题的代码:

fids = zeros(1,513);
for ix = 1:length(fids)
   fids(ix) = fopen(sprintf('testfile_%03d.tmp',ix),'w');
end
fids(507:end)
Run Code Online (Sandbox Code Playgroud)

(在此之后,像"帮助"这样的基本命令会失败,您需要运行fclose all).

一些网络搜索让其他人(在劣质Q&A论坛上)遇到同样的问题,但没有简单的解决方案(例如这个Mathworks论坛帖子.)


当我遇到Matlab限制时,我的第一直觉总是转向Java.例如:

streamwriters = cell(1,513);
for ix = 1:length(streamwriters)
    strName = sprintf('testfile_2_%03d.tmp',ix);
    streamwriters{ix} = java.io.FileOutputStream(strName);
end
streamwriters{513}.write(uint8('Some data to write'))
Run Code Online (Sandbox Code Playgroud)

每次从Matlab内部进行java调用都会产生一些成本(我想几毫秒),所以你真正做了1,000,000次写入,我会分析你的代码,并寻找在内存中收集代码的方法并在需要时执行更少,更大的批量写入.

还要记住,你需要单独关闭它们,例如

for ix = 1:length(streamwriters)
    streamwriters{ix}.close();
end
Run Code Online (Sandbox Code Playgroud)