kb1925 发表于 2021-1-22 19:46:06

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

老师们好,学生有一些关于批量生成文件上的问题想请老师们指点下
下面是我正在学习的源代码
这个代码运行后是在根目录下生成1-100编号的文件夹
我想把它变成每次运行只生成一个文件夹,每运行一次就先看是否有重名文件夹存在,有的话不要覆盖原来的,而是生成重名文件夹名+1的名字。
比如运行第一遍,根目录只产生第1号文件夹,第二遍是第1,2号两个文件夹,第三遍就是1,2,3号文件夹,以此类推
最终根目录下有100个文件夹
但它们是在每次运行程序下依次生成的,而不是一次性生成
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’这两个,我也不明白他们的具体用法,也请老师们帮忙解惑,麻烦老师们了

xinger 发表于 2021-1-23 06:21:04

cd等百度windows CMD。

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

fcode 发表于 2021-1-23 09:35:44

md 就是创建文件夹,这是windows命令行的一个命令(而不是fortran,fortran只是调用它)
md 的意思是 make directory

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

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

kb1925 发表于 2021-1-23 10:40:21

xinger 发表于 2021-1-23 06:21
cd等百度windows CMD。

PROGRAM MAIN


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

kb1925 发表于 2021-1-23 10:43:17

fcode 发表于 2021-1-23 09:35
md 就是创建文件夹,这是windows命令行的一个命令(而不是fortran,fortran只是调用它)
md 的意思是 make...

感谢您的热心帮助,我好好学习下这个程序,可能还有不懂的地方要问麻烦老师们了
页: [1]
查看完整版本: 关于查询文件夹是否存在并新建的问题