go语言之操作目录

1.创建目录

os.Mkdir

package main

import(
	"fmt"
	"os"
)

func main() {
	dir_name := `test-dir`
	dir_name1 := `D:\test\test-dir1`
	dir_name2 := `D:\test\test-dir2\subdir`

	// 在当前目录创建一个权限为0777的 “test-dir” 目录。
	// 结论:可以创建,但是目录已存在会报错
	err := os.Mkdir(dir_name, 0777)
	if err != nil {
		fmt.Println(err)
	}

	// 在已存在的目录 "D:\test" 下创建一个权限为0777的 “test-dir1"目录。
	// 结论: 可以创建,但是目录已存在会报错
	err1 := os.Mkdir(dir_name1, 0777)
	if err1 != nil{
		fmt.Println(err1)
	}

	// 在已存在的目录 "D:\test" 下创建一个权限为0777的 “test-dir2\subdir"目录。 
	// 结论:不能创建多级子目录
	err2 := os.Mkdir(dir_name2, 0777)
	if err2 != nil{
		fmt.Println(err2)  // 报错:  mkdir D:\test\test-dir2\subdir: The system cannot find the path specified.
	}
}

os.MkdirAll

package main

import(
	"fmt"
	"os"
	"time"
)

func main() {
	dir_name := `all-dir`
	dir_name1 := `D:\test\all-dir1`
	dir_name2 := `D:\test\all-dir2\subdir`

	// 在当前目录创建一个权限为0777的 “test-dir” 目录
	// 结论:可以创建, 目录已存在也不会报错
	err := os.MkdirAll(dir_name, 0777)
	if err != nil {
		fmt.Println(err)
	}

	// 在已存在的目录 "D:\test" 下创建一个权限为0777的 “test-dir1"目录。
	// 结论: 可以创建,目录已存在也不会报错
	err1 := os.MkdirAll(dir_name1, 0777)
	if err1 != nil{
		fmt.Println(err1)
	}

	// 在已存在的目录 "D:\test" 下创建一个权限为0777的 “test-dir2\subdir"目录。 
	// 结论:可以创建多级子目录,目录已存在也不会报错
	err2 := os.MkdirAll(dir_name2, 0777)
	if err2 != nil{
		fmt.Println(err2) 
	}

	// 实战, 创建文件上传目录
	uploaddir := `D:\test\static\upload\` + time.Now().Format("2006-01-02")
	err3 := os.MkdirAll(uploaddir, 0700)
	if err3 != nil{
		fmt.Println(err3)
	}
}

重命名目录

os.Rename

package main

import(
	"fmt"
	"log"
	"os"
)

func main(){
	old_name := "dir_name1"
	new_name := "dir_name2"
	err := os.Mkdir(old_name, 0777)

	if err != nil {
		fmt.Println(err)
	}

	err1 := os.Rename(old_name, new_name)
	if err != nil{
		log.Fatal(err1)
	}
}

删除目录

os.Remove

package main

import(
	"fmt"
	"os"
)

func main() {
	dir_name := "del_dir"
	dir_name2 := "del_dir2/test2"

	err := os.MkdirAll(dir_name, 0755)

	if err != nil {
		fmt.Println(err)
	}

	// 结论:可以删除目录
	err = os.Remove(dir_name)

	if err != nil{
		fmt.Println(err)
	}

	err = os.MkdirAll(dir_name2, 0755)

	if err != nil {
		fmt.Println(err)
	}

	// 报错:remove del_dir2: The directory is not empty.
	// 结论:不能删除带有文件或文件夹的目录,只能删除空目录
	err = os.Remove("del_dir2")

	if err != nil{
		fmt.Println(err)
	}
}

os.RemoveAll

package main

import (
	"log"
	"os"
	"time"
)

func main() {
	dir_name := "dir_name/test/ok"

	err := os.MkdirAll(dir_name, 0755)
	if err != nil{
		log.Fatal(err)
	}

	time.Sleep(5 * time.Second)

	// 结论: RemoveAll可以删除带有数据的目录
	err = os.RemoveAll("dir_name")
	if err != nil{
		log.Fatal(err)
	}
}
posted @ 2021-07-30 17:32  zhanghuiyan  阅读(171)  评论(0)    收藏  举报