Golang os包下常用的文件相关操作

一、文件操作的相关方法

// File represents an open file descriptor.
type File struct {
    *file // os specific
}

 

File表示打开的文件描述符

操作File的常用函数:

1.Create函数

func Create(name string) (*File, error) {

       return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)

}

 

功能:创建一个文件,文件的mode为0666(读写权限),如果文件已存在,则重新创建一个,原文件被覆盖(内容会被清空),创建的新文件具有读写权限,实现是调用OpenFile来创建文件的。

 

2.NewFile函数

func NewFile(fd uintptr, name string) *File

 

功能:根据文件描述符和名字创建一个新的文件

Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")   

Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")  

Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")

 

 

3.OpenFile函数

func OpenFile(name string, flag int, perm FileMode) (*File, error)

 

功能:按指定文件权限和打开方式打开文件或者创建文件,其中flag标志如下

O_RDONLY:只读模式(read-only)

O_WRONLY:只写模式(write-only)

O_RDWR:读写模式(read-write)

//以上三种模式必须指定一个

O_APPEND:追加模式(append)

O_CREATE:文件不存在就创建(create a new file if none exists.)

O_EXCL:与 O_CREATE 一起用,构成一个新建文件的功能,它要求文件必须不存在(used with O_CREATE, file must not exist)

O_SYNC:同步方式打开,即不使用缓存,直接写入硬盘

O_TRUNC:打开并清空文件

 

至于操作权限perm,除非创建文件时才需要指定,不需要创建新文件时可以将其设定为0.虽然go语言给perm权限设定了很多的常量,但是习惯上也可以直接使用数字,如0666(具体含义和Unix系统的一致).

 

4.Open函数

func Open(name string) (*File, error)

功能:打开一个文件,返回文件描述符,该文件描述符只有只读权限.他相当于OpenFile(name string,O_RDWR,0)

 

5.Pipe函数

func Pipe() (r *File, w *File, err error)

 

功能:返回一对连接的文件,从r中读取写入w中的数据,即首先向w中写入数据,此时从r中变能够读取到写入w中的数据,Pipe()函数返回文件和该过程中产生的错误.

 

示例:

func main() {
       r,w,_ := os.Pipe()
       w.Write([]byte("Hello Pipe!"))

       bs := make([]byte,20)
       n,err := r.Read(bs)
       if err != nil {
           log.Fatal(err)
       }

       fmt.Println(string(bs[:n]))  //打印结果: Hello Pipe!

}

 

6. Chdir函数

func Chdir(dir string) error  

功能:将当前工作目录更改为dir目录。

 

7. Getwd函数

func Getwd() (dir string, err error)   

功能:获取当前目录,类似linux中的pwd。

 

8. Chmod函数

func Chmod(name string, mode FileMode) error    

功能:更改文件的权限(读写执行,分为三类:all-group-owner)

 

9. Chown函数

func Chown(name string, uid, gid int) error 

功能:更改文件拥有者owner

 

10. Chtimes函数

func Chtimes(name string, atime time.Time, mtime time.Time) error   

功能:更改文件的访问时间和修改时间,atime表示访问时间,mtime表示更改时间

 

11. Rename函数

func Rename(oldpath, newpath string) error

功能:用于修改文件夹或文件名的名称

 

12. Mkdir函数

func Mkdir(name string, perm FileMode) error

功能:用于创建指定权限的文件夹,只能创建一级目录。

注意:当该文件夹已经存在时,会返回error(Cannot create a file when that file already exists.)

 

13. MkdirAll函数

func MkdirAll(path string, perm FileMode) error

功能:用于递归创建文件目录,可以创建多级目录。

func main() {
       dir,err := os.Getwd()
       if err != nil {
           log.Fatal(err)
       }
### 使用 Golangos 创建目录 在 Golang 中,`os` 提供了丰富的功能来与操作系统进行交互,其中括创建目录的操作。通过 `os.Mkdir` 或 `os.MkdirAll` 函数可以轻松实现目录的创建。以下是对这两个函数的详细说明和示例代码。 #### 1. `os.Mkdir` 函数 `os.Mkdir` 用于创建单级目录。如果需要创建多级目录,则需要调用多次 `os.Mkdir` 或使用 `os.MkdirAll`。函数签名如下: ```go func Mkdir(name string, perm FileMode) error ``` - `name`:要创建的目录路径。 - `perm`:新目录的权限模式(例如 `0755` 表示所有者可读写执行,组和其他用户可读执行)。 #### 示例代码 以下是一个使用 `os.Mkdir` 创建单级目录的示例[^4]: ```go package main import ( "log" "os" ) func main() { err := os.Mkdir("newdir", 0755) if err != nil { log.Fatal(err) } log.Println("Directory created successfully.") } ``` #### 2. `os.MkdirAll` 函数 `os.MkdirAll` 用于递归地创建多级目录。即使父目录不存在,也会一并创建。函数签名如下: ```go func MkdirAll(path string, perm FileMode) error ``` - `path`:要创建的完整目录路径。 - `perm`:新目录的权限模式。 #### 示例代码 以下是一个使用 `os.MkdirAll` 创建多级目录的示例[^2]: ```go package main import ( "log" "os" ) func main() { err := os.MkdirAll("newdir/subdir", 0755) if err != nil { log.Fatal(err) } log.Println("Directory created successfully.") } ``` #### 注意事项 - 在创建目录时,确保当前程序有足够的权限执行该操作。可以通过 `os.Chmod` 修改权限或在运行时确保权限充足。 - 权限模式通常以八进制表示,例如 `0644` 表示文件权限为所有者可读写,组和其他用户只可读;`0755` 表示所有者可读写执行,组和其他用户可读执行。 #### 错误处理 如果目录已经存在,`os.Mkdir` 和 `os.MkdirAll` 都会返回一个错误。可以通过检查错误类型来判断具体原因。例如: ```go if err != nil { if os.IsExist(err) { log.Println("Directory already exists.") } else { log.Fatal(err) } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值