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)
    }
}