檔案操作是個很重要的話題,使用也非常頻繁,熟悉如何操作檔案是必不可少的。golang 對檔案的支援是在 os package 裡,具體操作都封裝在 type file struct {} 結構體中。
一、func open(name string) (file *file, err error)
再簡單不過了,給乙個路徑給它,返回檔案描述符,如果出現錯誤就會返回乙個 *patherror。
這是乙個唯讀開啟模式,實際上就是 os.openfile() 的快捷操程式設計客棧作,它的原型如下:
複製** **如下:
func open(n string) (file *file, err error)
二、func openfile(name string, flag int, perm filemode) (file *file, err error)
這個複雜點,需要提供檔案路徑、開啟模式、檔案許可權。
開啟標記:
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:開啟並清空檔案
檔案許可權(unix許可權位):只有在建立檔案時才需要,不需要建立檔案可以設定為 0。os庫雖然提供常量,但是我一般直接寫數字,如0664。
如果你需要設定多個開啟標程式設計客棧記和unix許可權位,需要使用位操作符"|",示例**如下:
複製** **如下:
f, err := os.openfile("test.txt", os.o_create|os.o_append|os.o_rdwr, os.modeperm|os.modetemporary)
if err != nil
如果檔案存在就以讀寫模式開啟,並追加寫入;如果檔案不存在就建立,然後以讀寫模式開啟。
三、func create(name string) (file *file, err error)
實際上這也是 os.openfil 的快捷操作。建立乙個新檔案並以讀寫方式開啟,許可權位"0666",如果檔案存在則會清空。原型如下:
複製** **如下:
func create(name string) (file *file, err error)
四、任何檔案的開啟操作,請記得及時釋放
複製** **如下:
func readfile(pth string) error
defer f.close() //釋放資源,時刻不忘
...}os 模組中還有乙個 func newfile(fd uintptr, name string) *file 函式,使程式設計客棧用給出的unix檔案描述符和名稱建立乙個檔案。參考:
複製** **如下:
stdin = newfile(uintptr(syscall.stdin), "/dev/stdin")
stdout = newfile(uintptr(syscall.stdout), "/dev/stdout")
stderr = newfile(uintptr(syscall.stderr), "/dev/stderr")
本文標題: go語言檔案的建立與開啟例項分析
本文位址:
GO語言 檔案操作例項
package main import bufio fmt io ioutil os func main 以追加資料的形式寫入檔案 defer f.close f.writestring str 讀檔案func readfile filename string readbuf make byte,1...
檔案的建立,開啟與關閉
int chmod const char path,mode t mode mode 代表訪問許可權 int fchmod int fildes mode t mode 字元常量值 對應的八進位制數值 含義s irusr 00400 所有者可讀取 s iwusr 00200 所有者可寫入 s ixu...
linux下檔案的建立,開啟與關閉
1.open 函式 open 系統呼叫用來開啟或建立乙個檔案 函式原型為 include include include int open const char pathname,int flags int open const char pathname,int flags,mode t mode...