自学内容网 自学内容网

Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件

设备文件:
屏幕(标准输出设备) fmt.Println()往标准输出设备写内容
键盘(标准输入设备) fmt.Scan()从标准输入设备读取内容

磁盘文件,放在存储设备上的文件
文本文件:以记事本打开,能看到内容(不是乱码)
二进制文件:以记事本打开,能看到内容:(是乱码)

为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失,文件放磁盘,程序结束,文件还是存在。

建立与打开文件

新建文件有两种方法:

create

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

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件象是可读写的。如果文件存在,它会清空文件。

NewFile

func NewFile (fd uintptr,name string) *File

根据文件描述符创建相应的文件,返回一个文件对象

打开文件有两种方法

Open

func Open (name string) (file *File,err Error)

该方法打开一个名称为 name 的文件,但是是只读方式,内部实现其实调用了 OpenFile

OpenFile

func OpenFile (name string,flag int,perm uint32) (file *File,err Error)

打开名称为 name 的文件,flag 是打开的方式,只读、读写等,perm是权限。不论是Create还是Open最终都会调用OpenFile
在这里插入图片描述
在这里插入图片描述

写文件

Write

func (file *File) Write(b []byte) (n int,err Error)

写入 byte 类型的信息到文件,以切片的方式,可以处理二进制或者非二进制

WriteAt

func (file *File) WriteAt(b []byte,off int64) (n int,err Error)

从指定位置开始写入 byte 类型的信息到文件

WriteString

func (file *File) WriteString(s string) (ret int,err Error)

写入string类型的信息到文件

读文件

Read

func (file *File) Read(b []byte) (n int,err Error)

读取数据到b中

ReadAt

func (file *File) ReadAt(b []byte,off int64) (n int,err Error)

从指定位置off开始读取数据到b中

删除文件

Remove

func Remove(name string) Error

调用该函数就可以删除文件名为name的文件

标准设备文件,默认打开,用户可以直接使用

可以调用os.Stdout.Close()将输出设备关闭

在这里插入图片描述
os.Stdout.Close()将其关闭后将无法输出

可以调用os.Stdin.Close()将输入设备关闭

在这里插入图片描述

  • 关闭后无法输入

实现写文件

在这里插入图片描述

  • 创建一个文件Create
  • 写数据WriteString
  • 关闭文件,defer在函数结束之前关闭文件Close

实现读文件

*

  • 打开文件Open
  • 读文件Read按指定的大小来读
  • 关闭文件Close

一行一行读

在这里插入图片描述
在这里插入图片描述

  • buf, err := r.ReadBytes('\n')代表着遇到’\n’结束读取,但是\n也会读取进去
    在这里插入图片描述

实现拷贝文件

package main

import (
"fmt"
"io"
"os"
)

func main() {
list := os.Args
if len(list) != 3 {
fmt.Println("usage:xxx srcFile dstTile")
return
}

srcFileName := list[1]
dstFileName := list[2]

if srcFileName == dstFileName {
fmt.Println("源文件和目的文件不能相同")
return
}

//只读方式打开
sF, err1 := os.Open(srcFileName)
if err1 != nil {
fmt.Println("err1=", err1)
return
}

//新建目的文件
dF, err2 := os.Create(dstFileName)
if err2 != nil {
fmt.Println("err2=", err2)
return
}

defer sF.Close()
defer dF.Close()

buf := make([]byte, 4*1024)
for {
n, err := sF.Read(buf)
if err != nil {
if err == io.EOF {
//文件结束
break
}
fmt.Println("err=", err)
}
//往目的文件写 读多少写多少
dF.Write(buf[:n])
}

}

在这里插入图片描述


原文地址:https://blog.csdn.net/m0_73537205/article/details/140108893

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!