我需要从我的代码中创建一个新目录,以便能够向其中写入数据文件。
我正在使用Windows 8中的Force Fortran 2.0,我还想知道由于前/反斜杠问题,这种语法是否会因操作系统而异。
我需要从我的代码中创建一个新目录,以便能够向其中写入数据文件。
我正在使用Windows 8中的Force Fortran 2.0,我还想知道由于前/反斜杠问题,这种语法是否会因操作系统而异。
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。