os - skynocover/Wiki-for-GoLang GitHub Wiki
os
import ("os")
基本使用
檔案
- 檔案建立,若檔案已存在會覆蓋新的空檔案
f, _ := os.Create("widuu_2.go")
defer f.Close()
fmt.Println(reflect.ValueOf(f).Type()) //*os.Filea
- 開啟檔案(唯讀)
f, _ := os.OpenFile("10.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
defer f.Close()
fmt.Println(f.Stat())
- 刪除檔案
if err := os.Remove(files.Path); err != nil {
if os.IsNotExist(err) {
return
}
return
}
- 重新命名
err := os.Rename("1.go", "2.go")
if err != nil {
if os.IsExist(err) { //判斷一個是否檔案已經存在的錯誤
fmt.Println("檔案已經存在")
os.Rename("1.go", "widuu_1.go")
}
}
- 檔案大小
fileInfo, err := os.Stat(file.Path)
if err != nil {
log.Println(fmt.Sprintf("file id: %d, err: %v", file.ID, err))
return
}
size := fileInfo.Size()
file.Size = byteCountSI(size)
return
- 檔案比較
f1, _ := os.Stat("1.go") //取得檔案資訊
f2, _ := os.Stat("21.go")
if os.SameFile(f1, f2) { //比較檔案
fmt.Println("兩個檔案一樣")
return
}
fmt.Println("兩個檔案不一樣")
- 檔案長度
f, _ := os.Stat("1.go")
fmt.Println(f.Size()) //1.go 83
err := os.Truncate("1.go", 10)
if err != nil {
fmt.Println(err)
}
f, _ = os.Stat("1.go")
fmt.Println(f.Size()) //1.go現在是10 檔案也變成了package ma
環境
- 環境設定
err := os.Setenv("WD_PATH", "D:/golang")
if err != nil {
fmt.Println(err)
}
env := os.Getenv("WD_PATH")
fmt.Println(env) //返回的是D:/golang)
檔案讀取方式有三種
第1種
func main() {
// open input file
fi, err := os.Open("input.txt")
if err != nil {
panic(err)
}
// close fi on exit and check for its returned error
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
// open output file
fo, err := os.Create("output.txt")
if err != nil {
panic(err)
}
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
}
open及create的差異在於 open是唯讀
第3種
func main() {
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
// write the whole body at once
err = ioutil.WriteFile("output.txt", b, 0644)
if err != nil {
panic(err)
}
}