0

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

我正在使用Windows 8中的Force Fortran 2.0,我还想知道由于前/反斜杠问题,这种语法是否会因操作系统而异。

4

1 回答 1

3

Force Fortran 使用较旧的编译器(g77, g95, gfortran[unknown version]),所以我将提供一个使用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('some\path')
  print *,conv2unix('some\path')
end program

但是,这并没有处理诸如...之类的事情C:\...正如@VladimirF 指出的那样,您也可以/在Windows 中使用。您仍然需要将反斜杠转换为/Unix。

于 2015-05-31T08:28:54.683 回答