如何从Force Fortran 2.0中创建一个新目录



我需要创建一个新的目录从我的代码,以便能够写入数据文件到它。

我正在使用Force Fortran 2.0 from Windows 8,我也想知道这种语法是否会因前/反斜杠问题而从一个操作系统变化到另一个。

Force Fortran使用较旧的编译器(g77, g95, gfortran[未知版本]),因此我将使用system提出解决方案。对于支持它的编译器,最好使用符合标准的EXECUTE_COMMAND_LINE。

您可以简单地使用mkdir,它在Windows和Unix机器上都存在。默认情况下,mkdir在Windows上创建文件夹和(不存在的)父文件夹。这必须在Unix (-p)上显式给出。使用system,您可以从Fortran执行此操作:

program test
  implicit none
#ifdef _WIN32
  character(len=*),parameter :: MKDIR = 'mkdir '
  !                                           ^
  !                    The blank is intentional! 
#else
  character(len=*),parameter :: MKDIR = 'mkdir -p '
  !                                              ^
  !                       The blank is intentional! 
#endif
  integer :: stat
  stat = system( MKDIR // 'testFolder' )
  if ( stat /= 0 ) then
    print *, 'mkdir: failed to create folder! '
  endif
end program

您仍然需要创建一个例程来处理正确的文件夹分隔符,下面是一个简单的示例:

module conv_mod
contains
  function conv2win(str) result(res)
    implicit none
    character(len=*),intent(in) :: str
    character(len=len(str))     :: res
    integer                     :: i
    res = str
    do i=1,len(res)
      if ( res(i:i) == '/' ) res(i:i) = ''
    enddo ! i
  end function
  function conv2unix(str) result(res)
    implicit none
    character(len=*),intent(in) :: str
    character(len=len(str))     :: res
    integer                     :: i
    res = str
    do i=1,len(res)
      if ( res(i:i) == '' ) res(i:i) = '/'
    enddo ! i
  end function
end module
program conv
  use conv_mod
  print *,conv2win('some/path')
  print *,conv2win('somepath')
  print *,conv2unix('somepath')
end program

这并不关心像C:这样的事情,但是…正如@ vladimir所指出的,你也可以在Windows中使用/。在Unix中,您仍然需要将反斜杠转换为/

相关内容

  • 没有找到相关文章

最新更新