2

快速怀疑,我需要从一个文件夹中读取所有文件,但我不知道有多少文件。

我知道如何打开它们,只是不知道何时停止,即当所有文件都被读取时。

4

1 回答 1

4

如果你有一定的规则来生成文件名(如mydata001.dat、mydata002.dat等),那么你可以在每次生成文件名时,用inquire语句检查文件是否存在。第一次不存在,可以停止。下面的程序演示了:

program proba
  implicit none

  character(len=20) :: buffer
  logical :: exist
  integer :: ind

  ind = 1
  fileloop: do
    write(buffer,"(A,I3.3,A)") "mydata", ind, ".dat"
    inquire(file=buffer, exist=exist)
    if (.not. exist) then
      write(*,*) "File '", trim(buffer), "' not found, exiting loop"
      exit
    end if
    write(*,*) "File: '", trim(buffer), "' found."
    ind = ind + 1
  end do fileloop

end program proba

或者,如果无法根据规则生成文件名,您可以使用一些能够获取目录中文件列表的库。一种可能是我的modFileSys库,您可以通过以下方式对任意目录内容执行此操作:

program test_ls
  use filesys_module

  type(dirdesc) :: dir
  character(:), allocatable :: path

  call opendir("./", dir)
  path = dir%next_filename()
  do while (len(path) > 0)
    write(*, "(A)") path
    path = dir%next_filename()
  end do

end program test_ls
于 2013-04-03T15:50:01.840 回答