golang-os文件操作
package main import ( "fmt" "os" ) //func main() { // f,err :=os.Create("/home/landv/testOne.txt") // if err != nil { // fmt.Println("create err:",err) // return // } // defer f.Close() // fmt.Println("successful") //} //func main() { // f,err :=os.Open("/home/landv/testOne.txt") //以只读方式打开 // if err != nil { // fmt.Println("create err:",err) // return // } // defer f.Close() // _, err = f.WriteString("这是一个One测试文件#######") // if err != nil { // fmt.Println("WriteString err:",err) // return // } // fmt.Println("successful") //} func main() { f,err :=os.OpenFile("/home/landv/testOne.txt",os.O_RDWR,6) if err != nil { fmt.Println("create err:",err) return }else { content :="这是要追加的内容 " n,_ :=f.Seek(0,2) _,err =f.WriteAt([]byte(content),n) } defer f.Close() //_, err = f.WriteString("这是一个One测试文件#######") // //if err != nil { // fmt.Println("WriteString err:",err) // return //} fmt.Println("successful") }
添加O_APPEND就可以追加内容了
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
n,_ :=f.Seek(io.SeekStart,io.SeekEnd) //使用常量好理解,当然你可以直接写(0,2)
文件读操作
package main import ( "bufio" "fmt" "io" "os" ) func main() { //_,err :=os.Create("D:/gotest/aaa.txt") f,err :=os.OpenFile("D:/gotest/aaa.txt",os.O_RDWR,6) if err != nil{ fmt.Println("OpenFile err:",err) return } defer f.Close() fmt.Println("Suceessful") //_, _ = f.WriteString("############ ") reader := bufio.NewReader(f) for { buf, err := reader.ReadBytes(' ') if err != nil && err==io.EOF{ fmt.Println("文件读取完毕") return }else if err != nil { fmt.Println("err:", err) } fmt.Println(string(buf)) } }
文件拷贝
package main import ( "fmt" "io" "os" ) func main() { //打开读文件 f_r,err :=os.Open("/home/landv/testOne.txt") if err != nil { fmt.Println("Open err:",err) return } defer f_r.Close() //打开写文件 f_w,err :=os.Create("/home/landv/1.txt") if err != nil { fmt.Println("Create err:",err) return } defer f_w.Close() //从文件中读取数据,放到缓冲区中 buf := make([]byte, 4096) //循环从读文件中,获取数据,原封不动的写到另一个文件中 for { n, err := f_r.Read(buf) if err != nil && err == io.EOF { fmt.Printf("读完了;n=%d ", n) return } _, _ = f_w.Write(buf[:n]) //读多少,写多少 } }
目录操作
package main import ( "fmt" "os" ) func main() { fmt.Println("请输入都要查询的目录:") var path string _, _ = fmt.Scan(&path) f, err := os.OpenFile(path, os.O_RDONLY, os.ModeDir) if err != nil { fmt.Println("err:", err) } defer f.Close() //读取目录项 info, err := f.Readdir(-1)//-1 读取目录中所有的目录项 //变量返回的切片 for _, fileInfo := range info{ if fileInfo.IsDir(){ fmt.Println(fileInfo.Name(),"是一个目录") fmt.Println("时间是:",fileInfo.ModTime()) }else { fmt.Println(fileInfo.Name(),"是一个文件") } } }