新聞中心
Go語言的 os 包下有一個 OpenFile 函數(shù),其原型如下所示:

創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站建設與策劃設計,漳縣網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設十余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:漳縣等地區(qū)。漳縣做網(wǎng)站價格咨詢:13518219792
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
其中 name 是文件的文件名,如果不是在當前路徑下運行需要加上具體路徑;flag 是文件的處理參數(shù),為 int 類型,根據(jù)系統(tǒng)的不同具體值可能有所不同,但是作用是相同的。
下面列舉了一些常用的 flag 文件處理參數(shù):
- O_RDONLY:只讀模式打開文件;
- O_WRONLY:只寫模式打開文件;
- O_RDWR:讀寫模式打開文件;
- O_APPEND:寫操作時將數(shù)據(jù)附加到文件尾部(追加);
- O_CREATE:如果不存在將創(chuàng)建一個新文件;
- O_EXCL:和 O_CREATE 配合使用,文件必須不存在,否則返回一個錯誤;
- O_SYNC:當進行一系列寫操作時,每次都要等待上次的 I/O 操作完成再進行;
- O_TRUNC:如果可能,在打開時清空文件。
【示例 1】:創(chuàng)建一個新文件 golang.txt,并在其中寫入 5 句“http://c.biancheng.net/golang/”。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//創(chuàng)建一個新文件,寫入內(nèi)容 5 句 “http://c.biancheng.net/golang/”
filePath := "e:/code/golang.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("文件打開失敗", err)
}
//及時關閉file句柄
defer file.Close()
//寫入文件時,使用帶緩存的 *Writer
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString("http://c.biancheng.net/golang/ \n")
}
//Flush將緩存的文件真正寫入到文件中
write.Flush()
}執(zhí)行成功之后會在指定目錄下生成一個 golang.txt 文件,打開該文件如下圖所示:
【示例 2】:打開一個存在的文件,在原來的內(nèi)容追加內(nèi)容“C語言中文網(wǎng)”
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
filePath := "e:/code/golang.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println("文件打開失敗", err)
}
//及時關閉file句柄
defer file.Close()
//寫入文件時,使用帶緩存的 *Writer
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString("C語言中文網(wǎng) \r\n")
}
//Flush將緩存的文件真正寫入到文件中
write.Flush()
}
執(zhí)行成功之后,打開 golang.txt 文件發(fā)現(xiàn)內(nèi)容追加成功,如下圖所示:
【示例 3】:打開一個存在的文件,將原來的內(nèi)容讀出來,顯示在終端,并且追加 5 句“Hello,C語言中文網(wǎng)”。
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
filePath := "e:/code/golang.txt"
file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
if err != nil {
fmt.Println("文件打開失敗", err)
}
//及時關閉file句柄
defer file.Close()
//讀原來文件的內(nèi)容,并且顯示在終端
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Print(str)
}
//寫入文件時,使用帶緩存的 *Writer
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString("Hello,C語言中文網(wǎng)。 \r\n")
}
//Flush將緩存的文件真正寫入到文件中
write.Flush()
}
執(zhí)行成功之后,會在控制臺打印出文件的內(nèi)容,并在文件中追加指定的內(nèi)容,如下圖所示:
【示例 4】:編寫一個程序,將一個文件的內(nèi)容復制到另外一個文件(注:這兩個文件都已存在)
package main
import (
"fmt"
"io/ioutil"
)
func main() {
file1Path := "e:/code/golang.txt"
file2Path := "e:/code/other.txt"
data, err := ioutil.ReadFile(file1Path)
if err != nil {
fmt.Printf("文件打開失敗=%v\n", err)
return
}
err = ioutil.WriteFile(file2Path, data, 0666)
if err != nil {
fmt.Printf("文件打開失敗=%v\n", err)
}
}執(zhí)行成功后,發(fā)現(xiàn)內(nèi)容已經(jīng)復制成功,如下圖所示:
本文標題:創(chuàng)新互聯(lián)GO教程:Go語言文件的寫入、追加、讀取、復制操作
新聞來源:http://m.fisionsoft.com.cn/article/dpopioh.html


咨詢
建站咨詢
