go获取当前目录下的文件和文件夹,以及获取当前目录夹下所有子文件和子文件夹

go获取当前目录下的文件和文件夹,以及获取当前目录夹下所有子文件和子文件夹

1、获取当前目录下的文件夹和文件

思路:使用ioutil.ReadDir(path)来遍历当前文件夹,使用IsDir()判断是文件夹还是文件,然后收集信息

package main

import (
   "fmt"
   "io/ioutil"
   "path/filepath"
)

type currentDirInfo struct {
   currentDirs  []string
   currentFiles []string
}

func getCurrentDir(path string) (currentDirInfo, error) {
   infos, err := ioutil.ReadDir(path)
   if err != nil {
      return currentDirInfo{}, nil
   }
   var currentDirs []string
   var currentFiles []string
   for _, info := range infos {
      fmt.Printf("Name:%-30s    Size:%-10d字节    Modtime:%s    IsDir:%v\n", info.Name(), info.Size(), info.ModTime().Format("2006-01-02 03:04:05"), info.IsDir())
      abs, err := filepath.Abs(info.Name())
      if err != nil {
         return currentDirInfo{}, nil
      }
      if info.IsDir() {
         currentDirs = append(currentDirs, abs)
      } else {
         currentFiles = append(currentFiles, abs)
      }
   }
   fmt.Printf("=======================当前文件夹==============================\n")
   for _, v := range currentDirs {
      fmt.Printf("当前文件夹:%s\n", v)
   }
   fmt.Printf("========================当前文件=============================\n")
   for _, v := range currentFiles {
      fmt.Printf("当前文件:%s\n", v)
   }

   return currentDirInfo{currentDirs: currentDirs, currentFiles: currentFiles}, nil
}
func main() {
   _, err := getCurrentDir(".")
   if err != nil {
      return
   }
}

运行

image-20221010144034652

2、获取当前目录下的所有文件和所有文件夹(包括子目录)

package main

import (
   "fmt"
   "io/fs"
   "path/filepath"
)

func walk(path string, info fs.FileInfo, err error) error {
   fmt.Printf("%s %+v %v\n", path, info.Name(), err)
   return err
}

type currentDirInfo struct {
   currentDirs  []string
   currentFiles []string
}

func getDirInfo(currentDir string) (currentDirInfo, error) {
   var currentDirs []string
   var currentFiles []string
   abs, err := filepath.Abs(currentDir)
   if err != nil {
      return currentDirInfo{}, nil
   }
   err = filepath.Walk(currentDir, func(path string, info fs.FileInfo, err error) error {
      absPath := filepath.Join(abs, path)
      if info.IsDir() {
         currentDirs = append(currentDirs, absPath)
      } else {
         currentFiles = append(currentFiles, absPath)
      }
      return err
   })
   if err != nil {
      return currentDirInfo{}, nil
   }
   fmt.Printf("=======================当前文件夹==============================\n")
   for _, v := range currentDirs {
      fmt.Printf("当前文件夹:%s\n", v)
   }
   fmt.Printf("========================当前文件=============================\n")
   for _, v := range currentFiles {
      fmt.Printf("当前文件:%s\n", v)
   }

   return currentDirInfo{currentDirs: currentDirs, currentFiles: currentFiles}, nil
}
func main() {
   _, err := getDirInfo(".")
   if err != nil {
      return
   }
}

运行

image-20221010145807811

参考:

https://www.jianshu.com/p/8b181edc9989

posted @   南风丶轻语  阅读(1196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2020-10-10 Java 调用 WebService
点击右上角即可分享
微信分享提示