【问题标题】:Opening folder with gfortran使用 gfortran 打开文件夹
【发布时间】:2017-08-08 13:36:04
【问题描述】:

这是我的代码:

Program Write_in_folder

Implicit none

Integer::Num_Ber
Integer,parameter::Le=367
Character(Le)::Output
Character(Le),parameter::fmt_1='("Result\Output_",i0,".txt")'
Character(Le),parameter::fmt_2='(2x,i0)'
Character(Le),parameter::fmt_3='mkdir Result'

Write(*,*)"Enter the number:"
Read(*,*)Num_Ber

Write(Output,trim(adjustl(fmt_1)))Num_Ber

Call execute_command_line(trim(adjustl(fmt_3)))

Open(Unit=1,File=trim(adjustl(Output)),Status='Unknown')

     Write(1,trim(adjustl(fmt_2)))Num_Ber

Close(Unit=1,Status='Keep') 

Stop
End Program Write_in_folder

我要打开文件夹,名称为:Result_Num_Ber

哪种方案好?

如何检查同名的文件夹是否已经打开?如果是,则不需要执行此代码序列。

【问题讨论】:

  • 使用fortran。您正在使用一种称为 Fortran 的语言进行编程。为什么要将您的受众仅限于关注gfortran 标签的少数人?
  • 你的代码有问题吗?它做了你想做的事吗?实际上,您所说的“打开文件夹”是什么意思?移动到目录?打开文件?
  • 您的源代码无法编译。您是否遇到任何错误消息?您应该向我们显示错误消息。 execute_command_line 完全错误。
  • 你可能会发现一些有用的stackoverflow.com/q/9522933/1004168
  • @Holmz:如果您正在考虑 GETFILEINFOQQ(我找不到任何关于任何称为 GETINFOQQ 的信息),那么我想粗略的 GFortran 等价物将是 STAT:gcc.gnu.org/onlinedocs/gfortran/STAT.html

标签: fortran gfortran


【解决方案1】:

“如何检查那个名字的文件夹是否已经打开?如果是则不需要执行这一系列代码。”

我喜欢对目录和文件都使用 INQUIRE。

CHARACTER(LEN=80)  :: Base_Name
CHARACTER(LEN=80)  :: SomeDirectory
CHARACTER(LEN=256) :: Full_Name
INTEGER            :: Len_SomeDirectory
LOGICAL            :: Existentialism

!....
SomeDirectory = '/data/2017'
Len_SomeDirectory = LEN_TRIM(SomeDirectory)
!...
INQUIRE(DIR=SomeDirectory, EXIST=Existentialism)
IF(Existentialism) THEN
  Full_name = SomeDirectory(1: Len_SomeDirectory) // '/' //   Base_Name(1:LEN_TRIM(Base_Name))
ELSE
  ! Maybe create some directory...
ENDIF
! etc

那么 STAT 或 GETFILEINFOQQ 可以洞察你是否有写权限。

如果没有目录,可能最容易/最安全的卡盘和错误...然后手动创建目录并重新运行程序。

如果目录或文件没有写权限,“怎么办”也是同样的故事......“查克和错误并重新组合。”

【讨论】:

  • 支持dir=inquire 的说明符需要哪个版本的gfortran?
  • 目录是否存在这里已经覆盖stackoverflow.com/questions/9522933/…是否“打开”?我不知道打开目录的OP是什么意思,
  • @VladimirF:至少在 POSIX 世界中,您可以使用 opendir() “打开一个目录”以获得一个“目录流”,您可以使用它来迭代所有目录条目。此外,您可以 open() 一个目录,为您提供一个目录文件描述符,您可以使用它来例如使用 openat() 打开相对于该目录 fd 的文件。话虽如此,我知道没有任何 Fortran 编译器会以某种方式将这些操作公开为 Fortran IO 单元,其次,OP 看起来很新手,以至于他很可能对此一无所知。
  • 谢谢@francescalus - 我猜“INQUIRE(DIR=...)”超出了标准,因此不在 gfortran 中。我被宠坏了,变得依赖 !DEC$ 和其他扩展。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多