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

  

posted on 2017-06-16 10:11  怀素真  阅读(6530)  评论(1编辑  收藏  举报