package main; import ( "os" "log" "time" "fmt" ) //一些常用的文件操作函數 func main() { //創建目錄 //perm權限設置,os.ModePerm為0777 err := os.Mkdir("./tmp", os.ModePerm); if err != nil { log.Fatal(err); } //創建多級目錄 err2 := os.MkdirAll("./a/b/c", os.ModePerm); if err2 != nil { log.Fatal(err2); } //等個3秒,看目錄是否創建成功 time.Sleep(time.Second * 3); //刪除目錄 //如果目錄下有文件或其他目錄會出錯 err3 := os.Remove("./tmp"); if err3 != nil { log.Fatal(err3); } //刪除多級目錄 //如果是單個名稱,則刪除所有子目錄 err4 := os.RemoveAll("./a/b/c"); if err4 != nil { log.Fatal(err4); } //文件操作 //創建文件 //Create會返回一個文件對象,默認權限0666 file1, err5 := os.Create("./1.log"); defer file1.Close(); if err5 != nil { log.Fatal(err5); } //通過文件描述符(文件句柄)來創建文件 file2 := os.NewFile(file1.Fd(), "./2.log"); defer file2.Close(); //打開文件 //Open內部調用OpenFile,以只讀方式打開 file3, err6 := os.Open("./1.txt"); defer file3.Close(); if err6 != nil { log.Fatal(err6); } //OpenFile指定文件打開方式,只讀,只寫,讀寫和權限 file4, err7 := os.OpenFile("./2.txt", os.O_RDWR, 0666); defer file4.Close(); if err7 != nil { log.Fatal(file4); } //向文件寫入數據 file4.Write([]byte("我寫入數據")); //在指定位置寫入數據 file4.WriteAt([]byte("指定位置寫入數據"), 1024); //直接寫入string file4.WriteString("你好世界"); //讀取文件數據 //將文件偏移量設置為開頭 file4.Seek(0, 0); tmp := make([]byte, 256); //Read讀取數據到[]byte中 for n, _ := file4.Read(tmp); n != 0; n, _ = file4.Read(tmp) { fmt.Println(string(tmp)); } //ReadAt從off指定位置讀取數據到[]byte中 file4.Seek(0, 0); var off int64 = 0; for { n, _ := file4.ReadAt(tmp, off); off += int64(n); if n == 0 { break; } fmt.Println(string(tmp)); } //刪除文件 //Go中刪除文件和刪除文件夾同一個函數 err8 := os.Remove("./1.txt"); if err8 != nil { log.Fatal(err8); } }