主题:获取*.f文件自身的名称
sylve
[专家分:0] 发布于 2012-05-30 10:46:00
RT,请教如何在fortran中获取*.f文件自身的名称?
我试过GetFileInfoQQ
GetFileInfoQQ对目录下只有一个*.f文件是可行的,
对多个*.f文件就不好处理了。
回复列表 (共3个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2012-05-30 15:29:00
请注意,Fortran 是编译型语言,编译之后,成为目标代码。
目标代码将会完全脱离源代码,脱离编译器而运行。是独立的可执行程序。
这是 Fortran 编程的目标。为什么你还要返过来找源代码呢?
如果用 GetFileInfoQQ,是可以获得多个文件的。可能你没用好。
[quote]Program Main
Implicit None
Integer n
call DoWithWildcard( '*.f*' , show , n )
Contains
Subroutine Show( cFile , iLoop )
Character( Len = * ) , Intent( IN ) :: cFile
Integer , Intent( IN ) :: iLoop
Write( * , * ) cFile
End Subroutine Show
End
Subroutine DoWithWildcard(cWildcard,CallBack,iTotal)
Use IFPort , only : GetFileInfoQQ , GetLastErrorQQ , FILE$INFO , FILE$LAST , FILE$ERROR , FILE$FIRST , ERR$NOMEM , ERR$NOENT , FILE$DIR
Implicit None
Interface
Subroutine CallBack( cFile , iLoop )
Character( Len = * ) , Intent( IN ) :: cFile
Integer , Intent( IN ) :: iLoop
End Subroutine CallBack
End Interface
Character( Len = * ) , Intent( IN ) :: cWildcard
Integer , Intent( OUT ) :: iTotal
Type (FILE$INFO) :: stInfo
Integer(4) :: iWildhandle , iLength , iRet
iWildhandle = FILE$FIRST
iTotal = 0
Do While (.TRUE.)
iLength = GetFileInfoQQ( cWildCard , stInfo , iWildhandle )
If (( iWildhandle == FILE$LAST) .OR.( iWildhandle == FILE$ERROR )) then
Select Case (GetLastErrorQQ())
Case (ERR$NOMEM) !//内存不足
iTotal = - 1
return
Case (ERR$NOENT) !//碰到通配符序列尾
return
Case Default
iTotal = 0
return
End Select
End If
If ( ( stInfo%permit.AND.FILE$DIR ) == 0 ) then
call CallBack( Trim(stInfo%Name) , iTotal + 1 )
iTotal = iTotal + 1
End If
End Do
End Subroutine DoWithWildcard[/quote]
板凳
sylve [专家分:0] 发布于 2012-05-30 21:30:00
@臭石头雪球:
你的回复中包含了一些对fortran的深刻认识,受教了,多谢。
我之所以要获取*.f文件本身的名称是由于我写的fortran是供其他软件调用的子程序。
该软件调用fortran子程序后,会生成“子程序_job.ext”形式的文件。
我需要来判断这个“子程序_job.ext”文件是否存在,所以就要用到*.f文件本身的名称。
通过GetFileInfoQQ当然是能够实现的,但对同文件夹下有多个*.f文件处理就不方便了。
故到论坛上来请教更直接的方法,
如果有直接方法,那就再好不过了;
没有,用GetFileInfoQQ也尚可接受。
3 楼
臭石头雪球 [专家分:23030] 发布于 2012-05-31 08:51:00
我给出的代码可以实现,多个 .f 文件。请认真阅读。
我来回复