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