创建与打开

golang 创建文件的函数有:

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

# NewFile使用给出的Unix文件描述符和名称创建一个文件
func NewFile(fd int, name string) *File

golang 打开文件的函数有:

# Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;
# 对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。
func Open(name string) (file *File, err error)

# OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。
# 它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。
# 如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
func OpenFile(name string, flag int, perm uint32)

写文件

golang 写文件的函数有:

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

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

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

eg:

func main() {
    usrFile := "data.txt"
    fout, err := os.Create(usrFile)
    defer fout.Close()
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    
    fout.WriteString("Just a test data!rn")
    fout.Write([]byte("Just a test dataa!rn"))
}

读文件

golang 读文件的函数有:

# Read方法从f中读取最多len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。  # 文件终止标志是读取0个字节且返回值err为io.EOF。
func (file *File) Read(b []byte) (n int, err error)

# ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入b。
# 它返回读取的字节数和可能遇到的任何错误。当n<len(b)时,本方法总是会返回错误;如果是因为到达文件结尾,返回值err会是io.EOF。
func (file *File) ReadAt(b []byte, off int64) (n int, err error)

eg:

func main() {
    usrFile := "data.txt"
    fin, err := os.Open(usrFile)
    defer fin.Close()
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    
    buf := make([]byte, 1024)
    for {
        n, _ := fin.Read(buf)
        if 0 ==n {
            break
        }
        os.Stdout.Write(buf[:n])
    }
}

bufio 使用

eg:

func main() {
    fi, err := os.Open("input.txt")
    defer fi.Close()
    if err != nil {
        panic(err)
    }
    r := bufio.NewReader(fi)
    
    fo, err := os.Open("output.txt")
    defer fo.Close()
    if err != nil {
        panic(err)
    }
    w := bufio.NewWriter(fo)
    
    buf := make([]byte, 1024)
    s
    for {
        n ,err := r.Read(buf)
        # err == EOF时要特殊处理
        if err != nil && err != io.EOF {
            panic(err)
        }
        if n == 0 {
            break
        }
        
        if ne2, err := w.Write(buf[:n]); err != nil {
            panic(err)
        } else if  n2 != n {
            panic("error in writing")
        } 
    }
    
    # err前面已经定义过了, 不要使用 := 
    if err = w.Flush(); err != nil {
        panic(err)
    }

}

使用 ioutil

ioutil 是 golang 文件操作的一个辅助包,提供如下函数:

# 从指定的文件中读取数据并返回文件的内容。调用成功时,返回的err时 nil而不是EOF
# 因为本函数是读取整个文件,它不会将读取返回的EOF视为应返回的错误
func ReadFile(filename string) ([]byte, error)

# 函数向指定的文件中写入数据。如果文件不存在,将按给定的权限(perm)创建文件
# 如果文件存在,在写入之前会清空文件
fucn WriteFile(filename string, data []byte, perm os.FileMode) error eg:

func main() {
    b, err := ioutil.ReadFile("input.txt")
    if err != nil {
        panic(err)
    }
    
    err = ioutil.WriteFile("output.txt", b, 0644)
    if err != nil {
        panic(err)
    }
} ## 删除文件 **golang删除文件的函数有:**

funnc Remove(name string) Error

.ds-share{ text-align: right; } <p><a href="/media" class="user-mention" title="@media"><i>@</i>media</a> only screen and (max-width: 700px) { .ds-share {</p> <p>} } </p>

<div class="ds-share" data-thread-key="/blog/2016/05/14/golang 文件操作" data-title="golang 文件操作" data-images="http://lee/img/green.jpg" data-content="golang 文件操作

创建与打开 golang 创建文件的函数有:

Create 采用模式 0666(任何人都可读写,不可执行)创建一个名为 name 的... | Microdust:Azeril's blog" data-url="http://lee/blog/2016/05/14/golang%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C/">