Go_file操作

1. FileInfo

package main

import (
	"os"
	"fmt"
)

func main() {
	/*
	FileInfo:文件信息
		interface
			Name(),文件名
			Size(),文件大小,字节为单位
			IsDir(),是否是目录
			ModTime(),修改时间
			Mode(),权限

	 */
	//stat 统计
	fileInfo, err := os.Stat("/Users/ruby/Documents/pro/a/aa.txt")
	if err != nil {
		fmt.Println("err :", err)
		return
	}
	fmt.Printf("%T
", fileInfo)
	//文件名
	fmt.Println(fileInfo.Name())
	//文件大小
	fmt.Println(fileInfo.Size())
	//是否是目录
	fmt.Println(fileInfo.IsDir()) //IsDirectory
	//修改时间
	fmt.Println(fileInfo.ModTime())
	//权限
	fmt.Println(fileInfo.Mode()) //-rw-r--r--
}

2. 文件操作

package main

import (
"fmt"
"path/filepath"
"path"
"os"
)

func main() {
	/*
	文件操作:
	1.路径:
		相对路径:relative
			ab.txt
			相对于当前工程
		绝对路径:absolute
			/Users/ruby/Documents/pro/a/aa.txt

		.当前目录
		..上一层
	2.创建文件夹,如果文件夹存在,创建失败
		os.MkDir(),创建一层
		os.MkDirAll(),可以创建多层

	3.创建文件,Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
		os.Create(),创建文件

	4.打开文件:让当前的程序,和指定的文件之间建立一个连接
		os.Open(filename)
		os.OpenFile(filename,mode,perm)

	5.关闭文件:程序和文件之间的链接断开。
		file.Close()

	5.删除文件或目录:慎用,慎用,再慎用
		os.Remove(),删除文件和空目录
		os.RemoveAll(),删除所有
	 */
	//1.路径
	fileName1:="/Users/ruby/Documents/pro/a/aa.txt"
	fileName2:="bb.txt"
	fmt.Println(filepath.IsAbs(fileName1)) //true
	fmt.Println(filepath.IsAbs(fileName2)) //false
	fmt.Println(filepath.Abs(fileName1)) //获取绝对路径
	fmt.Println(filepath.Abs(fileName2)) //获取绝对路径

	fmt.Println("获取父目录:",path.Join(fileName1,".."))

	//2.创建目录
	err := os.Mkdir("/Users/ruby/Documents/pro/a/bb",os.ModePerm) //os.ModePerm 权限 0777
	if err != nil{ //文件夹存在就创建失败
		fmt.Println("err:",err)
		return
	}
	fmt.Println("文件夹创建成功。。")
	//创建多层目录
	err :=os.MkdirAll("/Users/ruby/Documents/pro/a/cc/dd/ee",os.ModePerm)
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println("多层文件夹创建成功")

	//3.创建文件:Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
	file1,err :=os.Create("/Users/ruby/Documents/pro/a/ab.txt")
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println(file1)

	file2,err := os.Create(fileName2)//创建相对路径的文件,是以当前工程为参照的
	if err != nil{
		fmt.Println("err :",err)
		return
	}
	fmt.Println(file2)

	//4.打开文件:
	file3 ,err := os.Open(fileName1) //只读的
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println(file3)
	/*
	第一个参数:文件名称
	第二个参数:文件的打开方式
	const (
    O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
    O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
    O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
    O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
    O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
    O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
    O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)
	第三个参数:文件的权限:文件不存在创建文件,需要指定权限
	 */
	file4,err := os.OpenFile(fileName1,os.O_RDONLY|os.O_WRONLY,os.ModePerm)
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println(file4)

	//5关闭文件,
	file4.Close()

	//6.删除文件或文件夹:
	//删除文件
	err :=  os.Remove("/Users/ruby/Documents/pro/a/aa.txt")
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println("删除文件成功。。")
	//删除目录
	err :=  os.RemoveAll("/Users/ruby/Documents/pro/a/cc")
	if err != nil{
		fmt.Println("err:",err)
		return
	}
	fmt.Println("删除目录成功。。")
}

 

原文地址:https://www.cnblogs.com/yzg-14/p/12250997.html