golang 檔案操作

2021-09-28 18:21:49 字數 3305 閱讀 3861

檔案開啟模式:

const (

o_rdonly int = syscall.o_rdonly // 唯讀模式開啟檔案

o_wronly int = syscall.o_wronly // 只寫模式開啟檔案

o_rdwr int = syscall.o_rdwr // 讀寫模式開啟檔案

o_create int = syscall.o_creat // 如果不存在將建立乙個新檔案

o_excl int = syscall.o_excl // 和o_create配合使用,檔案必須不存在

o_sync int = syscall.o_sync // 開啟檔案用於同步i/o

o_trunc int = syscall.o_trunc // 如果可能,開啟時清空檔案

)

1.參考os.open()和os.openfile()

logfile,err:=os.open("log/system.txt")

if err!=nil

defer logfile.close()

logger:=log.new(logfile,"\r\n",log.ldate|log.ltime)

logger.print("hello")

發現怎麼都不能往system.txt檔案中寫入hello字串,改了一下:

logfile,err:=os.openfile("log/system.txt",os.o_rdwr|os.o_create,0)

...

結論就是open方法只能讀

2.建立

f,err := os.create(filename)

defer f.close()

if err !=nil else

參考go判斷資料夾是否存在,並建立

// 判斷資料夾是否存在

func pathexists(path string) (bool, error)

if os.isnotexist(err)

return false, err

}func main()

if exist else else

}}

檔案刪除的時候,不管是普通檔案還是目錄檔案,都可以用err:=os.remove(filename)這樣的操作來執行。當然要是想移除整個資料夾,直接使用removeall(path string)操作即可。可以看一下removeall函式的內部實現,整體上就是遍歷,遞迴的操作過程,其他的類似的檔案操作都可以用類似的模板來實現

os.removeall("./gzfiles2")
1、在使用f, err := os.open(file_path)開啟檔案之後直接使用f.read() f.write()結合自定義的buffer每次從檔案中讀入/讀出固定的內容

2、使用ioutl的readfile和writefile方法

3、使用bufio採用帶有快取的方式進行讀寫,比如通過info:=bufio.newreader(f)將實現了io.reader的介面的例項載入上來之後,就可以使用info.readline()來每次實現一整行的讀取,直到err資訊為io.eof時,讀取結束

golang幾種讀檔案方式的比較對三種檔案操作的讀入速度進行了比較

package main

import(

"fmt"

"os"

"flag"

"io"

"io/ioutil"

"bufio"

"time"

)func read1(path string)string

defer fi.close()

chunks := make(byte,1024,1024)

buf := make(byte,1024)

forif 0 ==n

// fmt.println(string(buf[:n]))

}return string(chunks)

}func read2(path string)string

defer fi.close()

r := bufio.newreader(fi)

chunks := make(byte,1024,1024)

buf := make(byte,1024)

forif 0 ==n

// fmt.println(string(buf[:n]))

}return string(chunks)

}func read3(path string)string

defer fi.close()

fd,err := ioutil.readall(fi)

// fmt.println(string(fd))

return string(fd)

}func main()

fmt.println(string(f))

start := time.now()

read1(file)

t1 := time.now()

fmt.printf("cost time %v\n",t1.sub(start))

read2(file)

t2 := time.now()

fmt.printf("cost time %v\n",t2.sub(t1))

read3(file)

t3 := time.now()

fmt.printf("cost time %v\n",t3.sub(t2))

}

執行命令go run read.go filename, 指定需要讀取的檔案就可以測試了。

writefile將data寫入到filename指定的檔案中。如果檔案不存在,writefile將會建立該檔案,且檔案的許可權是perm;如果檔案存在,先清空檔案內容再寫入。

content := byte("hello golang")

//將指定內容寫入到檔案中

err := ioutil.writefile("output.txt", content, 0666)

if err != nil

追加檔案內容

func main() 

defer f.close()

f.writestring("another content")

}

go lang 讀寫檔案操作

參考備份 寫程式離不了檔案操作,這裡總結下 go語言檔案操作。一 建立與開啟 建立檔案函式 func create name string file file,err error func newfile fd int,name string file 具體見官網 開啟檔案函式 func open ...

Golang 檔案讀寫操作

package main import fmt io log os path filepath strconv func main strfile strdir testfile.txt fmt.println file to open is strfile 開啟檔案,如果沒有,那麼建立,設定為讀寫...

golang 檔案讀寫操作

實現php file get contents,file put contents 函式 package php import errors os strings sync var mu sync.mutex unsupportprotocols 暫時不支援的協議型別 var unsupportpr...