Fortran Coder

查看: 146|回复: 4

[文件读写] 关于查询文件夹是否存在并新建的问题

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
10 点
发表于 2021-1-22 19:46:06 | 显示全部楼层 |阅读模式
老师们好,学生有一些关于批量生成文件上的问题想请老师们指点下
下面是我正在学习的源代码
这个代码运行后是在根目录下生成1-100编号的文件夹
我想把它变成每次运行只生成一个文件夹,每运行一次就先看是否有重名文件夹存在,有的话不要覆盖原来的,而是生成重名文件夹名+1的名字。
比如运行第一遍,根目录只产生第1号文件夹,第二遍是第1,2号两个文件夹,第三遍就是1,2,3号文件夹,以此类推
最终根目录下有100个文件夹

但它们是在每次运行程序下依次生成的,而不是一次性生成
[Fortran] 纯文本查看 复制代码
program new_file_piliang
    use DFPORT
    implicit none
    integer :: ierr
    integer :: ffn, fn,ifID    !前两项分别对应文件夹名称,文件名称
   character(len = 50) :: fileFolderName
   character(len = 50) :: fileName

     do ffn = 1,100,1
       write(fileFolderName,*) ffn
       fileFolderName = ".\"//trim(adjustl(fileFolderName))//"_txt" !文件夹路径
       ierr = system("md "//trim(fileFolderName))!这一行必须要有,没有则无法新建

    end do
     end program new_file_piliang

!>>>>>>>>>我也查到了一个每次查看是否存在重名txt文件的程序,有则在基础上新建一个txt<<<<<<<

PROGRAM MAIN
  CHARACTER(LEN=80) :: FILENAME,FORM
  INTEGER :: I
  logical :: exist
  integer :: p

  exist = .TRUE.
  I = 0
    DO WHILE (exist)
    SELECT CASE (I)       !选择合适的后缀号码
    CASE (0:9)
        WRITE(FORM,'(I1)') I
    CASE (10:99)
        WRITE(FORM,'(I2)') I
    CASE (100:999)
        WRITE(FORM,'(I3)') I
    CASE (1000:9999)
        WRITE(FORM,'(I4)') I
    END SELECT
    WRITE(FILENAME,*) ".\scalar",TRIM(FORM),'.txt'       !给文件名赋值为scalar+号码+格式
    INQUIRE(directory=FILENAME,exist=exist)        !再查询是否存在
        I = I + 1  !若存在,号码再加1
  END DO
  END PROGRAM

!>>>>>但不知这两二者该如何结合,或者如果有能更好解决我这个问题的方法,还请各位老师们不吝赐教

还有就是关于‘md’和‘cd’这两个,我也不明白他们的具体用法,也请老师们帮忙解惑,麻烦老师们了
回复

使用道具 举报

4

帖子

0

主题

0

精华

入门

F 币
42 元
贡献
15 点
发表于 2021-1-23 06:21:04 | 显示全部楼层
cd等百度windows CMD。

[Fortran] 纯文本查看 复制代码
PROGRAM MAIN
  IMPLICIT NONE
  CHARACTER(LEN=80) :: FILENAME,FORM
  INTEGER :: I,N
  logical :: exist

  exist = .TRUE.
  N=100
  
  Do I=1,N,1

    SELECT CASE (I)       !选择合适的后缀号码
       CASE (0:9)
          WRITE(FORM,'(I1)') I
       CASE (10:99)
          WRITE(FORM,'(I2)') I
       CASE (100:999)
          WRITE(FORM,'(I3)') I
       CASE (1000:9999)
          WRITE(FORM,'(I4)') I
    END SELECT
    
    WRITE(FILENAME,*) "scalar",TRIM(FORM),'.txt'    !给文件名赋值为scalar+号码+格式

    INQUIRE(file=FILENAME,exist=exist)        !查询是否存在
    
    if (exist) then
        !!!若存在,则无操作直接跳过
    else
        !!!若不存在,则创建:
        !!! Linux 下:
        call system('touch '//FILENAME) !!!创建文件
        call system('mkdir '//FILENAME) !!!创建文件夹
        !!! Windows 下,自行百度更多CMD:
        !call system('mkdir '//FILENAME) !!!创建文件夹 (或者md)
    endif
    
  END DO
  
  END PROGRAM

1576

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1679 元
贡献
1081 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2021-1-23 09:35:44 | 显示全部楼层
md 就是创建文件夹,这是windows命令行的一个命令(而不是fortran,fortran只是调用它)
md 的意思是 make directory

而 cd 就是切换文件夹(也叫目录),同样是windows命令行的内容。
cd 的意思是 change current directory

[Fortran] 纯文本查看 复制代码
program main
  implicit none
  character(len=80) :: filename
  integer :: i,n
  logical :: isExist
  i = 1
  Do
    write(filename,'(i9)') i
    filename="scalar"//trim(adjustl(filename))//".txt"
    inquire(directory=filename,exist=isExist)    
    if (.not.isExist) then
      !call system('touch '//filename) !!!创建文件
      call system('mkdir '//filename) !!!创建文件夹
      exit
    endif
    i=i+1
  End Do  
end program main

3

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
10 点
 楼主| 发表于 2021-1-23 10:40:21 | 显示全部楼层
xinger 发表于 2021-1-23 06:21
cd等百度windows CMD。

[mw_shl_code=fortran,true]PROGRAM MAIN

感谢您的热心帮助  我好好看下cmd的指令

3

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
10 点
 楼主| 发表于 2021-1-23 10:43:17 | 显示全部楼层
fcode 发表于 2021-1-23 09:35
md 就是创建文件夹,这是windows命令行的一个命令(而不是fortran,fortran只是调用它)
md 的意思是 make  ...

感谢您的热心帮助,我好好学习下这个程序,可能还有不懂的地方要问  麻烦老师们了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2021-3-6 07:19

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表