首页 文章

在Fortran 90中打开多个文件

提问于
浏览
3

我想打开10,000个文件,文件名从 abc25000 开始直到 abc35000 ,并将一些信息复制到每个文件中 . 我写的代码如下:

PROGRAM puppy
IMPLICIT NONE

integer :: i
CHARACTER(len=3) :: n1
CHARACTER(len=5) :: cnum
CHARACTER(len=8) :: n2

loop1: do i = 25000 ,35000  !in one frame

  n1='abc'
  write(cnum,'(i5)') i
  n2=n1//cnum
  print*, n2
  open(unit=i ,file=n2)

enddo loop1

结束

这段代码应该生成从 abc24000 开始直到 abc35000 的文件,但它停止了大约一半的说法

在文件test-openFile.f90第17行(unit = 26021,file ='')Fortran运行时错误:打开文件太多

我需要做些什么来修复上面的代码?

3 回答

  • 3

    您需要一次处理一个文件(或者不超过操作系统限制的小组) .

    for each file:
      open file
      write
      close file
    
  • 4

    此限制由您的操作系统设置 . 如果您使用的是Unix / Linux变体,则可以使用 ulimit -n 从命令行检查限制,并使用 ulimit -n 16384 进行提升 . 您需要设置大于10000的限制,以允许shell打开的所有其他文件 . 您可能还需要管理员权限才能执行此操作 .

    我经常将限制高达2048来运行Fortran程序,但从未高达10000.但是,我回应其他答案,如果可能的话,最好重新构建程序以关闭每个文件,然后再打开下一个文件 .

  • 3

    操作系统往往对资源有限制 . 通常在例如Linux上,默认情况下每个进程限制1024个文件描述符 . 您获得的错误消息只是向上传递信息的Fortran运行时库,由于操作系统错误,它无法打开另一个文件 .

相关问题