一. os包内容介绍

  • 使用os包中内容进行操作系统文件或目录
  • File结构体表示操作系统文件(夹)
    1. // File represents an open file descriptor.
    2. type File struct {
    3. *file // os specific
    4. }
  1. // file is the real representation of *File.
  2. // The extra level of indirection ensures that no clients of os
  3. // can overwrite this data, which could cause the finalizer
  4. // to close the wrong file descriptor.
  5. type file struct {
  6. pfd poll.FD
  7. name string
  8. dirinfo *dirInfo // nil unless directory being read
  9. }
  • 操作系统的文件都是有权限控制的,包含可读,可写等,在os包中FileMode表示文件权限,本质是uint32,可取值都以常量形式提供
    1. // A FileMode represents a file's mode and permission bits.
    2. // The bits have the same definition on all systems, so that
    3. // information about files can be moved from one system
    4. // to another portably. Not all bits apply to all systems.
    5. // The only required bit is ModeDir for directories.
    6. type FileMode uint32
  1. // The defined file mode bits are the most significant bits of the FileMode.
  2. // The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
  3. // The values of these bits should be considered part of the public API and
  4. // may be used in wire protocols or disk representations: they must not be
  5. // changed, although new bits might be added.
  6. const (
  7. // The single letters are the abbreviations
  8. // used by the String method's formatting.
  9. ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
  10. ModeAppend // a: append-only
  11. ModeExclusive // l: exclusive use
  12. ModeTemporary // T: temporary file; Plan 9 only
  13. ModeSymlink // L: symbolic link
  14. ModeDevice // D: device file
  15. ModeNamedPipe // p: named pipe (FIFO)
  16. ModeSocket // S: Unix domain socket
  17. ModeSetuid // u: setuid
  18. ModeSetgid // g: setgid
  19. ModeCharDevice // c: Unix character device, when ModeDevice is set
  20. ModeSticky // t: sticky
  21. // Mask for the type bits. For regular files, none will be set.
  22. ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
  23. ModePerm FileMode = 0777 // Unix permission bits
  24. )
  • FIleInfo是一个interface表示文件的信息
    1. // A FileInfo describes a file and is returned by Stat and Lstat.
    2. type FileInfo interface {
    3. Name() string // base name of the file
    4. Size() int64 // length in bytes for regular files; system-dependent for others
    5. Mode() FileMode // file mode bits
    6. ModTime() time.Time // modification time
    7. IsDir() bool // abbreviation for Mode().IsDir()
    8. Sys() interface{} // underlying data source (can return nil)
    9. }

二. 资源路径

  • 在获取系统资源时资源路径分为相对路径和绝对路径
  • 相对路径:在Go语言中相对路径用于是GOPATH,也就是项目的根目录
  • 绝对路径:磁盘根目录开始表示资源详细路径的描述

三.代码示例

  • Go语言标准库中提供了两种创建文件夹的方式 ```go / 要求文件夹不存在且父目录必须存在,才能创建 / //error := os.Mkdir(“D:/godir”, os.ModeDir) //if error != nil { // fmt.Println(“文件夹创建失败”,error) // return //} //fmt.Println(“文件夹创建成功”)
  1. /*
  2. 如果文件夹已经存在,不报错,保留原文件夹
  3. 如果父目录不存在帮助创建
  4. */
  5. error := os.MkdirAll("D:/godir/a/b", os.ModeDir)
  6. if error != nil {
  7. fmt.Println("文件夹创建失败",error)
  8. return
  9. }
  10. fmt.Println("文件夹创建成功")
  1. - 创建空文件
  2. ```go
  3. /*
  4. 创建文件时要求文件目录必须已经存在
  5. 如果文件已经存在则会创建一个空文件覆盖之前的文件
  6. */
  7. file, err := os.Create("D:/godir/test.txt")
  8. if err != nil {
  9. fmt.Println("文件创建失败,", err)
  10. return
  11. }
  12. fmt.Println("文件创建成功",file.Name())
  • 重命名文件或文件夹

    1. /*
    2. 第一个参数:原文件夹名称,要求此路径是必须存在的
    3. 第二个参数:新文件夹名称
    4. */
    5. err := os.Rename("D:/godir", "D:/godir1")
    6. if err != nil {
    7. fmt.Println("重命名文件夹失败,", err)
    8. return
    9. }
    10. fmt.Println("文件夹重命名成功")
    11. /*
    12. 重命名文件和重命名文件夹用法相同
    13. */
    14. err = os.Rename("D:/godir1/test.txt", "D:/godir1/test1.txt")
    15. if err != nil {
    16. fmt.Println("重命名文件失败,", err)
    17. return
    18. }
    19. fmt.Println("文件重命名成功")
  • 获取文件(夹)信息

    1. f, err := os.Open("D:/godir1/test1.txt")
    2. defer f.Close() //文件打开后要关闭,释放资源
    3. if err != nil {
    4. fmt.Println("打开文件失败", err)
    5. return
    6. }
    7. fileInfo, err := f.Stat()
    8. if err != nil {
    9. fmt.Println("获取文件信息失败", err)
    10. return
    11. }
    12. fmt.Println(fileInfo.Name()) //文件名
    13. fmt.Println(fileInfo.IsDir()) //是否是文件夹,返回bool,true表示文件夹,false表示文件
    14. fmt.Println(fileInfo.Mode()) //文件权限
    15. fmt.Println(fileInfo.ModTime()) //修改时间
    16. fmt.Println(fileInfo.Size()) //文件大小
  • 删除文件或文件夹

    1. /*
    2. 删除的内容只能是一个文件或空文件夹且必须存在
    3. */
    4. //err := os.Remove("D:/godir1/a")
    5. //if err != nil {
    6. // fmt.Println("文件删除失败", err)
    7. // return
    8. //}
    9. //fmt.Println("删除成功")
    10. /*
    11. 只要文件夹存在,删除文件夹.
    12. 无论文件夹是否有内容都会删除
    13. 如果删除目标是文件,则删除文件
    14. */
    15. err := os.RemoveAll("D:/godir1/a.txt")
    16. if err != nil {
    17. fmt.Println("删除失败", err)
    18. return
    19. }
    20. fmt.Println("删除成功")