Go语言文件创建

Posted Go程序员开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言文件创建相关的知识,希望对你有一定的参考价值。

Go语言文件创建

os包提供了操作系统函数的不依赖平台的接口。设计为Unix风格的,虽然错误处理是go风格的;失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。

创建目录

创建目录操作常用函数:

func Getwd() (dir string, err error)    

Getwd返回一个对应当前工作目录的根路径。如果当前目录可以经过多条路径抵达(因为硬链接),Getwd会返回其中一个。

func Mkdir(name string, perm FileMode) error 

Mkdir使用指定的权限和名称创建一个目录。如果出错,会返回*PathError底层类型的错误。

func IsExist(err error) bool

返回一个布尔值说明该错误是否表示一个文件或目录已经存在。ErrExist和一些系统调用错误会使它返回真。 

func IsNotExist(err error) bool  

返回一个布尔值说明该错误是否表示一个文件或目录不存在。ErrNotExist和一些系统调用错误会使它返回真。

func MkdirAll(path string, perm FileMode) error

MkdirAll使用指定的权限和名称创建一个目录,包括任何必要的上级目录,并返回nil,否则返回错误。权限位perm会应用在每一个被本函数创建的目录上。如果path指定了一个已经存在的目录,MkdirAll不做任何操作并返回nil。

func Rename(oldpath, newpath stringerror 

Rename修改一个文件的名字,移动一个文件。可能会有一些个操作系统特定的限制。

代码实现:

package main

import (
    "fmt"
    "os"
)

func main() {
    path, err := os.Getwd()
    if err != nil {
        fmt.Printf("get path err : %v\n"err)
    }
    fmt.Printf("当前目录 : %v\n", path)

    err = os.Mkdir("./oldboy"0777)
    if err != nil {
        fmt.Printf("mkdir oldboy err : %v\n"err)
        if os.IsExist(err) {
            fmt.Println("文件已存在!")
        }
        if os.IsNotExist(err) {
            fmt.Println("文件不存在!")
        }
    }

    err = os.MkdirAll("./oldboy/go"0777)
    if err != nil {
        fmt.Println("mkdirall err : %v\n"err)
    }

    err = os.Rename("./oldboy/go""./oldboy/golang")
    if err != nil {
        fmt.Printf("rename err : %v\n"err)
    }
}

创建文件

创建文件操作常用函数和方法:

func Create(name string) (file *File, err error)

Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError。

func NewFile(fd uintptr, name string) *File

NewFile使用给出的Unix文件描述符和名称创建一个文件。

func (f *File) Close() error

Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。

func (f *File) Name() string

Name方法返回(提供给Open/Create等方法的)文件名称。

func (f *File) Stat() (fi FileInfo, err error)

Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError。

func SameFile(fi1, fi2 FileInfo) bool

SameFile返回fi1和fi2是否在描述同一个文件。例如,在Unix这表示二者底层结构的设备和索引节点是相同的;在其他系统中可能是根据路径名确定的。

SameFile应只使用本包Stat函数返回的FileInfo类型值为参数,其他情况下,它会返回假。

type FileInfo interface {
    Name() string       // 文件的名字(不含扩展名)
    Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
    Mode() FileMode     // 文件的模式位
    ModTime() time.Time // 文件的修改时间
    IsDir() bool        // 等价于Mode().IsDir()
    Sys() interface{}   // 底层数据来源(可以返回nil)
}
 
   
   
 
func (m FileMode) IsRegular() bool

IsRegular报告m是否是一个普通文件。

func (m FileMode) IsDir() bool

IsDir报告m是否是一个目录。

代码实现:

package main

import (
    "fmt"
    "os"
    "syscall"
)

func main() {
    file1, err := os.Create("./file1.txt")
    if err != nil {
        fmt.Printf("create file1 err : %v\n", err)
    }
    if file1 != nil {
        defer func(file *os.File) { file.Close() }(file1)
        fmt.Println("create file1 success ")
    }

    file2 := os.NewFile(uintptr(syscall.Stdin), "./file2.txt")
    if file2 != nil {
        defer func(file *os.File) { file.Close() }(file2)
        fmt.Println("newfile file2 success ")
    }

    fileName := file1.Name()
    fmt.Printf("file1 name is %v\n", fileName)

    fileInfo1, err := file1.Stat()
    if err != nil {
        fmt.Printf("get file1 info err : %v\n", err)
    }

    fileInfo2, err := file2.Stat()
    if err != nil {
        fmt.Printf("get file2 info err : %v\n", err)
    }

    b := os.SameFile(fileInfo1, fileInfo2)
    if b {
        fmt.Println("file1 与 file2 是同一个文件")
    } else {
        fmt.Println("file1 与 file2 不是同一个文件")
    }

    fileMode1 := fileInfo1.Mode()
    b = fileMode1.IsRegular()
    if b {
        fmt.Println("file1 是普通文件")
    } else {
        fmt.Println("file1 不是普通文件")
    }

    b = fileMode1.IsDir()
    if b {
        fmt.Println("file1 是普通目录")
    } else {
        fmt.Println("file1 不是普通目录")
    }
}

下一篇:

Go语言文件写入------敬请期待!


第十一章 并发编程

   11.1    

   11.2    

   11.3    

   11.4    

第十二章 反射

   12.1    

   12.2    

第十三章 数据格式

   13.1    

   13.2    

第十四章 终端读取

   14.1    

   14.2    


自2017年6月起,老男孩IT教育就顺应技术发展潮流开设了Go语言开发课程,以帮助更多有需要的盆友们提升技能,若是想要了解具体课程内容的话,那就点击本文左下方“阅读原文”来咨询吧~


看完本文有收获?那就分享给更多人吧

常按下方二维码关注我哦~

点击“阅读原文”打开新页面

以上是关于Go语言文件创建的主要内容,如果未能解决你的问题,请参考以下文章

go语言os怎么创建文件后格式化显示

Go语言系列之包

Go命令教程13. go tool cgo

Go语言基础之包

GO语言(十六):模糊测试入门(上)

14.包