咔咔博客之文件打開與關閉
案例
文件的操做使用os包
linux
package main import ( "fmt" "os" "time" ) func main() { file, e := os.Open("D:/kaka.txt") if e != nil { fmt.Println("文件打開失敗") } else { fmt.Println("文件打開成功") } defer func() { file.Close() fmt.Println("文件已關閉") }() fmt.Println("愉快滴欣賞avi藝術") time.Sleep(3 * time.Second) }
注意點
在os.open時,若是你的操做系統時windows這個時候不要打開文件直接複製文件路徑,會報一個文件目錄的錯誤windows
The filename, directory name, or volume label syntax is incorrect.微信
在打開文件的路徑必須本身手動輸入,由於編碼有問題編碼
打開文件也必須關閉文件,因此在任什麼時候候打開一個文件操做後使用延遲執行的defer來進行關閉文件url
defer是延遲執行的關鍵詞,在全部程序都執行完纔會執行的代碼spa
文件打開模式
- O_RDONLY int = syscall.O_RDONLY // 只讀模式
- O_WRONLY int = syscall.O_WRONLY // 只寫模式
- O_RDWR int = syscall.O_RDWR // 讀寫模式
- O_APPEND int = syscall.O_APPEND //追加模式
- O_CREATE int = syscall.O_CREAT // 建立模式,若是文件不存在的話
- O_TRUNC int = syscall.O_TRUNC // 覆蓋模式
文件權限
權限詳解有什麼問題能夠看這篇文章,詳細的說明了權限的問題。
這裏簡單的說一下 r w x 分別表明的是什麼意思
r表示可讀
w表示可寫
x表示可執行操作系統
任何文件都有使用者,羣組,other的概念。 權限所表明的是r = 4 w = 2 x = 1 這塊的知識是在linux寫過的,就不在繼續討論了。.net
文件讀取
func main() { file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666) if e != nil { fmt.Println("文件打開失敗:err", e) return } else { fmt.Println("文件打開成功") } // 打開時馬上掛起關閉程序 defer func() { file.Close() fmt.Println("文件關閉成功") }() // 建立文件的讀取器 reader := bufio.NewReader(file) // 死循環讀取 for { // 以換行符爲界,分批次讀取數據,獲得readString readString, e := reader.ReadString('\n') if e != nil { fmt.Println("文件讀取失敗;err", e) // 若是已到文件末尾,則直接結束 if e == io.EOF { break } } fmt.Print(readString) } fmt.Println("讀取結束") }
簡易的數據讀取
func main() { bytes, err := ioutil.ReadFile("d:/kaka.txt") if err != nil { fmt.Println("讀取失敗,err=", err) return } else { contentStr := string(bytes) fmt.Println(contentStr) } }