以文本方式查看主题

-  Fortran中文网  (http://fortran.cn/bbs/index.asp)
--  Fortran语言使用经验交流  (http://fortran.cn/bbs/list.asp?boardid=2)
----  [求助]如何使用fortran实现文件的复制,和删除?  (http://fortran.cn/bbs/dispbbs.asp?boardid=2&id=708)

--  作者:sailorxft
--  发布时间:2007/4/17 14:44:00

--  [求助]如何使用fortran实现文件的复制,和删除?
我是fortran的初级使用者,编程主要用于科学计算,不过最近需要通过程序自动复制、删除文件。查了用户手册,看不懂。网上搜了半天也找不到一点信息。请各位fortran高手帮帮忙,急!!!
--  作者:yuxin
--  发布时间:2007/4/17 14:48:36

--  

        system(\'del file2\')

        system(\'copy file1 file2\')

可以实现,

DEL也可以用

      open(7,file=\'file2\')

      close(7,status=\'delete\')

COPY也可以用:

* LINK S_FL.OBJ WHEN USING F50
* LINK S_F32.OBJ WHEN USING F32
* DIFFERENT FROM COPY.F: GETARG CHANGE TO GETARG

INTEGER PAUSE
character C*1,INPUT*30,OUTPUT*30,S*2
CHARACTER CHARINK*1

IOVERWRITE=0
IF(IARGC().NE.2) THEN
  IF(IARGC().EQ.3) THEN
   CALL GETARG(3,S)
   IF( (S(1:1).EQ.\'/\'.OR.S(1:1).EQ.\'-\')
     &      .AND.(S(2:2).EQ.\'Y\'.OR.S(2:2).EQ.\'y\')) THEN
    IOVERWRITE=1
    GOTO 5
   END IF
  END IF
  CALL GETARG(1,INPUT)
  CALL GETARG(2,OUTPUT)
  WRITE(*,*) \'PARAMETER NUMBER IS NOT 2, IT IS\'
     &   ,IARGC(),INPUT,OUTPUT
  GOTO 100
C ELSE
C  CALL GETARG(2,S)
C  IF( (S(1:1).EQ.\'/\'.OR.S(1:1).EQ.\'-\')
C     &     .AND.(S(2:2).EQ.\'Y\'.OR.S(2:2).EQ.\'y\')) THEN
C   IOVERWRITE=1
C  
C   GOTO 5
C  END IF
END IF
5 CALL GETARG(1,INPUT)
CALL GETARG(2,OUTPUT)
open (1,file=INPUT,status=\'old\',access=\'direct\',recl=1,ERR=200)
IF(IOVERWRITE.EQ.0) THEN
  DO 15 I=30,1,-1
   IF(OUTPUT(I:I).NE.\' \') GOTO 16
15  CONTINUE
16  CONTINUE
  OPEN(2,FILE=OUTPUT(1:I),STATUS=\'OLD\',ERR=20)
  WRITE(*,*) \'FILE \',OUTPUT(1:I),\' EXISTS, OVERWRITE? (Y/N)\'
  READ(*,*) CHARINK
  INK=ICHAR(CHARINK)
  IF(CHAR(INK).EQ.\'Y\'.OR.CHAR(INK).EQ.\'y\') THEN
   CLOSE(2,STATUS=\'DELETE\')
   GOTO 20
  END IF
  CLOSE(2)
  WRITE(*,*) \'NO FILE COPIED.\'
  GOTO 100
END IF
20 open (2,file=OUTPUT,STATUS=\'OLD\',ERR=30)
CLOSE(2,STATUS=\'DELETE\')
30 open (2,file=OUTPUT,access=\'direct\',recl=1)
I=1
10 Read (1, rec=I,ERR=100) C
WRITE(2,REC=I) C
I=I+1
GOTO 10
200 WRITE(*,*) \'INPUT FILE "\',INPUT(1:LENGTH(INPUT)),\'" NOT EXISTS\'
100 End
C------------------------------------------------------------------------------
FUNCTION LENGTH(STR)
CHARACTER*(*) STR
DO 10 LENGTH=LEN(STR),1,-1
  IF(STR(LENGTH:LENGTH).NE.\' \') GOTO 20
10 CONTINUE
20 CONTINUE
END


--  作者:sailorxft
--  发布时间:2007/4/17 14:55:26

--  
非常感谢管理员的指导,我先试试!
--  作者:sailorxft
--  发布时间:2007/4/17 15:04:13

--  

      SYSTEM(\'DEL F:\\noise\\TEST.DAT\')


提示出错:

F:\\noise\\TRAN90.f(20) : Error: Syntax error, found END-OF-STATEMENT when expecting one of: ( % . = =>
      SYSTEM(\'DEL F:\\noise\\TEST.DAT\')


--  作者:sailorxft
--  发布时间:2007/4/17 15:14:08

--  

知道了,应该是:

      I=SYSTEM(\'DEL F:\\noise\\TRAN901.exe\')


非常感谢!


--  作者:changjun
--  发布时间:2007/10/14 20:33:36

--  
如果用Visual Fortran着调用CopyFile函数最简单
--  作者:nihaosb
--  发布时间:2020/7/30 18:12:27

--  
北京私家侦探<br>上海搬家公司<br>网站制作
京ICP备05056801号