Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 关闭多个文件_File_Fortran - Fatal编程技术网

File 关闭多个文件

File 关闭多个文件,file,fortran,File,Fortran,我需要关闭和删除几个文件,一旦他们被打开和内容存储在一些变量。为了避免重复语法,我可以使用: OPEN(UNIT = 27, FILE = "C:/Abaqus_JOBS/w.txt", status = "UNKNOWN") C READ(UNIT,END=1000) w 1000 CLOSE (UNIT, status='delete') , 所以我只需要指定一次CLOSE(UNIT,status='delete') 谢谢你可以,但你将在1000关

我需要关闭和删除几个文件,一旦他们被打开和内容存储在一些变量。为了避免重复语法,我可以使用:

        OPEN(UNIT = 27, FILE = "C:/Abaqus_JOBS/w.txt", status = "UNKNOWN")
  C
        READ(UNIT,END=1000) w
   1000 CLOSE (UNIT, status='delete') ,
所以我只需要指定一次
CLOSE(UNIT,status='delete')


谢谢

你可以,但你将在
1000关闭…
和下一次的任何调用之间做所有事情。就是

       READ(UNIT=27, END=1000)
1000   CLOSE(STATUS='delete')
       ... computations ...
       READ(UNIT=28, END=1000)
将导致您执行
。。。计算…
一遍又一遍,这可能是你不想要的。如果显式地编写
CLOSE
命令,或者像Alexander在评论中所说的那样,编写一个函数,在给定特定文件ID的情况下关闭文件并删除它,可能会更容易:

FUNCTION FileClose(lun) RESULT(ierr)
   INTEGER :: lun, ierr
   CLOSE(lun, STATUS='delete', IOSTAT=ierr)
END FUNCTION

我个人不会使用end语句,而是调用关闭正确文件的子例程:

subroutine del_file(uFile, stat)
  implicit none
  integer uFile, stat 

c If the unit is not open, stat will be non-zero
  close(unit=uFile, status='delete', iostat=stat)
end subroutine
你读到的声明是:

read(unit=curUnit, iostat=stat) w
if ( stat .ne. 0 ) call del_file(curUnit, stat)

您仍然需要一些逻辑来避免读取关闭的文件。我建议使用一个数组来保存与输入文件对应的所有单元

我不确定你的问题是否正确。。。是否要一次关闭并删除所有打开的文件?我必须打开27个文件,在到达每个文件的末尾后,我需要关闭并删除其中的每个文件。好的,您需要一些逻辑来关闭并删除正确的文件(
单元
)。我个人不会使用
end
语句,而是调用关闭正确文件的函数!好的,我试试看。我使用了
end
语句,因为我的编译器在读取过程中发出了一个错误,称为
forrtl:severe(24):文件结束。有没有办法通过使用函数而不是
end
语句来解决这个“文件结束”问题?方法是使用
iostat
语句
iostat>0
是一个读取失败,
iostat==-1
文件的结尾
iostat==-2
记录的结尾
在争议的边缘跳舞-但请注意,像这样具有副作用的函数可能不会以程序员预期的方式执行,给出了语言规则的特殊解释-请参见F2008 7.1.7。有了子程序,事情就更加确定了。考虑到一个函数通常只需键入一点内容,或者在引用点添加一个额外的变量,我强烈希望完全避免这个问题,而只使用一个子例程。@IanH:这是我的中间名;)。就个人而言,我只是在处理完文件后关闭并删除它,而不是将责任推给子例程。我变得越来越严重(29):现在找不到文件,因为我在
OPEN
语句中添加了
action=“READ”
。现在,我可能会想到你在上一段中写的警告:
你仍然需要一些逻辑来避免读取关闭的文件。我想我需要
action=“READ”
,因为有时我会得到一个错误
访问文件的权限被拒绝
。。。。这里的基本知识让我困惑不解。我会使用
整数
数组
单位
来存储每个文件的单位编号。我将数组初始化为
0
,并将
n
th进程的单元号存储在
units(n)
中。关闭(并删除)文件后,我会将相应的条目重置为零。然后,您可以使用
if(units(n).ne.0)read(unit=units(n),…)
来读取打开的文件。好的!谢谢你的帮助。我将
READ
WRITE
修改为
READWRITE
,这很有帮助。所以现在我没有初始错误,但不幸的是,我最终得到了
严重(9):访问文件的权限被拒绝
错误。看看你的提示能否解决这个问题。