系統函數
func Create(name string) (file *File, err Error)
根據提供的文件名創建新的文件,返回一個文件對象,默認權限是0666的文件,返回的文件對象是可讀寫的。
func NewFile(fd uintptr, name string) *File
根據文件描述符創建相應的文件,返回一個文件對象
func Open(name string) (file *File, err Error)
該方法打開一個名稱爲name的文件,但是是隻讀方式,內部實現其實調用了OpenFile。
func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
打開名稱爲name的文件,flag是打開的方式,只讀、讀寫等,perm是權限
func (file *File) Write(b []byte) (n int, err Error)
寫入byte類型的信息到文件
func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
在指定位置開始寫入byte類型的信息
func (file *File) WriteString(s string) (ret int, err Error)
寫入string信息到文件
func (file *File) Read(b []byte) (n int, err Error)
讀取數據到b中
func (file *File) ReadAt(b []byte, off int64) (n int, err Error)
從off開始讀取數據到b中
func Remove(name string) Error
調用該函數就可以刪除文件名爲name的文件
封裝函數
package myLib2
import (
"bufio"
"fmt"
"io"
"os"
)
func CreateFile(path string) os.File {
fout, err := os.Create(path)
if err != nil {
fmt.Println(err)
}
return *fout
}
func WriteByte(f os.File,b []byte) {
f.Write(b)
}
func WriteString(f os.File, input string) {
f.WriteString(input)
}
func ReadFile(path string) {
f, err := os.Open(path)
if err != nil {
fmt.Println("err = ", err)
return
}
defer f.Close()
buf := make([]byte, 1024*2)
n, err1 := f.Read(buf)
if err1 != nil && err1 != io.EOF {
fmt.Println("err1 = ", err1)
return
}
fmt.Println("buf = ", string(buf[:n]))
}
func ReadFileLine(path string) {
f, err := os.Open(path)
if err != nil {
fmt.Println("err = ", err)
return
}
defer f.Close()
r := bufio.NewReader(f)
for {
buf, err := r.ReadBytes('\n')
if err != nil {
if err == io.EOF {
break
}
fmt.Println("err = ", err)
}
fmt.Printf("buf = #%s#\n", string(buf))
}
}
func main() {
fout := myLib2.CreateFile("./test2.txt")
defer fout.Close()
outstr := fmt.Sprintf("%s:%d\n", "Hello go", 1)
myLib2.WriteString(fout, outstr)
myLib2.WriteByte(fout, []byte("abcd\n"))
var a string
fmt.Println("請輸入a: ")
fmt.Scan(&a)
fmt.Println("a = ", a)
myLib2.WriteString(fout, a)
myLib2.ReadFile("./test.txt")
myLib2.ReadFileLine("./test.txt")
}
文件拷貝
package main
import (
"fmt"
"io"
"os"
)
func main() {
list := os.Args
if len(list) != 3 {
fmt.Println("參數不正確")
return
}
srcFileName := list[1]
dstFileName := list[2]
if srcFileName == dstFileName {
fmt.Println("源文件和目的文件名字不能相同")
return
}
sF, err1 := os.Open(srcFileName)
if err1 != nil {
fmt.Println("err1 = ", err1)
return
}
dF, err2 := os.Create(dstFileName)
if err2 != nil {
fmt.Println("err2 = ", err2)
return
}
defer sF.Close()
defer dF.Close()
buf := make([]byte, 4*1024)
for {
n, err := sF.Read(buf)
if err != nil {
if err == io.EOF {
break
}else{
fmt.Println("err = ", err)
}
}
dF.Write(buf[:n])
}
fmt.Println("拷貝完成!")
}