GoFrame gfile-文件/目录操作

2022-04-09 13:44 更新

文件/目录操作

Mkdir

  • 说明:创建文件夹,支持递归创建(建议采用绝对路径),创建后的文件夹权限为:​drwxr-xr-x​。
  • 格式: 

func Mkdir(path string) error

  • 示例:

func ExampleMkdir() {
	// init
	var (
		path = gfile.TempDir("gfile_example_basic_dir")
	)

	// Creates directory
	gfile.Mkdir(path)

	// Check if directory exists
	fmt.Println(gfile.IsDir(path))

	// Output:
	// true
}

Create

  • 说明:创建文件/文件夹,如果传入的路径中的文件夹不存在,则会自动创建文件夹以及文件,其中创建的文件权限为​-rw-r–r–​。
  • 注意:如果需要创建文件的已存在,则会清空该文件的内容!
  • 格式: 

func Create(path string) (*os.File, error)

  • 示例:

func ExampleCreate() {
	// init
	var (
		path     = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dataByte = make([]byte, 50)
	)
	// Check whether the file exists
	isFile := gfile.IsFile(path)

	fmt.Println(isFile)

	// Creates file with given `path` recursively
	fileHandle, _ := gfile.Create(path)
	defer fileHandle.Close()

	// Write some content to file
	n, _ := fileHandle.WriteString("hello goframe")

	// Check whether the file exists
	isFile = gfile.IsFile(path)

	fmt.Println(isFile)
	
	// Reset file uintptr
	unix.Seek(int(fileHandle.Fd()), 0, 0)
	// Reads len(b) bytes from the File
	fileHandle.Read(dataByte)

	fmt.Println(string(dataByte[:n]))

	// Output:
	// false
	// true
	// hello goframe
}

Open

  • 说明:以只读的方式打开文件/文件夹。
  • 格式: 

func Open(path string) (*os.File, error)

  • 示例:

func ExampleOpen() {
	// init
	var (
		path     = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dataByte = make([]byte, 4096)
	)
	// Open file or directory with READONLY model
	file, _ := gfile.Open(path)
	defer file.Close()

	// Read data
	n, _ := file.Read(dataByte)

	fmt.Println(string(dataByte[:n]))

	// Output:
	// hello goframe
}

OpenFile

  • 说明:以指定`flag`以及`perm`的方式打开文件/文件夹。
  • 格式: 

func OpenFile(path string, flag int, perm os.FileMode) (*os.File, error)

  • 示例:

func ExampleOpenFile() {
	// init
	var (
		path     = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dataByte = make([]byte, 4096)
	)
	// Opens file/directory with custom `flag` and `perm`
	// Create if file does not exist,it is created in a readable and writable mode,prem 0777
	openFile, _ := gfile.OpenFile(path, os.O_CREATE|os.O_RDWR, gfile.DefaultPermCopy)
	defer openFile.Close()

	// Write some content to file
	writeLength, _ := openFile.WriteString("hello goframe test open file")

	fmt.Println(writeLength)

	// Read data
	unix.Seek(int(openFile.Fd()), 0, 0)
	n, _ := openFile.Read(dataByte)

	fmt.Println(string(dataByte[:n]))

	// Output:
	// 28
	// hello goframe test open file
}

OpenWithFalg

  • 说明:以指定`flag`的方式打开文件/文件夹。
  • 格式: 

func OpenWithFlag(path string, flag int) (*os.File, error)

  • 示例:

func ExampleOpenWithFlag() {
	// init
	var (
		path     = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dataByte = make([]byte, 4096)
	)

	// Opens file/directory with custom `flag`
	// Create if file does not exist,it is created in a readable and writable mode with default `perm` is 0666
	openFile, _ := gfile.OpenWithFlag(path, os.O_CREATE|os.O_RDWR)
	defer openFile.Close()

	// Write some content to file
	writeLength, _ := openFile.WriteString("hello goframe test open file with flag")

	fmt.Println(writeLength)

	// Read data
	unix.Seek(int(openFile.Fd()), 0, 0)
	n, _ := openFile.Read(dataByte)

	fmt.Println(string(dataByte[:n]))

	// Output:
	// 38
	// hello goframe test open file with flag
}

OpenWithFalgPerm

  • 说明:以指定`flag`以及`perm`的方式打开文件/文件夹。
  • 格式: 

func OpenWithFlagPerm(path string, flag int, perm os.FileMode) (*os.File, error) 

  • 示例:

func ExampleOpenWithFlagPerm() {
	// init
	var (
		path     = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dataByte = make([]byte, 4096)
	)

	// Opens file/directory with custom `flag` and `perm`
	// Create if file does not exist,it is created in a readable and writable mode with  `perm` is 0777
	openFile, _ := gfile.OpenWithFlagPerm(path, os.O_CREATE|os.O_RDWR, gfile.DefaultPermCopy)
	defer openFile.Close()

	// Write some content to file
	writeLength, _ := openFile.WriteString("hello goframe test open file with flag and perm")

	fmt.Println(writeLength)

	// Read data
	unix.Seek(int(openFile.Fd()), 0, 0)
	n, _ := openFile.Read(dataByte)

	fmt.Println(string(dataByte[:n]))

	// Output:
	// 38
	// hello goframe test open file with flag
}

Stat

  • 说明:获取给定路径的文件详情。
  • 格式: 

func Stat(path string) (os.FileInfo, error)

  • 示例:

func ExampleStat() {
	// init
	var (
		path = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)
	// Get a FileInfo describing the named file.
	stat, _ := gfile.Stat(path)

	fmt.Println(stat.Name())
	fmt.Println(stat.IsDir())
	fmt.Println(stat.Mode())
	fmt.Println(stat.ModTime())
	fmt.Println(stat.Size())
	fmt.Println(stat.Sys())

	// May Output:
	// file1
	// false
	// -rwxr-xr-x
	// 2021-12-02 11:01:27.261441694 +0800 CST
	// &{16777220 33261 1 8597857090 501 20 0 [0 0 0 0] {1638414088 192363490} {1638414087 261441694} {1638414087 261441694} {1638413480 485068275} 38 8 4096 0 0 0 [0 0]}
}

Copy

  • 说明:支持复制文件或目录
  • 格式: 

func Copy(src string, dst string) error 

  • 示例:

func ExampleCopy() {
	// init
	var (
		srcFileName = "gflie_example.txt"
		srcTempDir  = gfile.TempDir("gfile_example_copy_src")
		srcTempFile = gfile.Join(srcTempDir, srcFileName)

		// copy file
		dstFileName = "gflie_example_copy.txt"
		dstTempFile = gfile.Join(srcTempDir, dstFileName)

		// copy dir
		dstTempDir = gfile.TempDir("gfile_example_copy_dst")
	)

	// write contents
	gfile.PutContents(srcTempFile, "goframe example copy")

	// copy file
	gfile.Copy(srcTempFile, dstTempFile)

	// read contents after copy file
	fmt.Println(gfile.GetContents(dstTempFile))

	// copy dir
	gfile.Copy(srcTempDir, dstTempDir)

	// list copy dir file
	fList, _ := gfile.ScanDir(dstTempDir, "*", false)
	for _, v := range fList {
		fmt.Println(gfile.Basename(v))
	}

	// Output:
	// goframe example copy
	// gflie_example.txt
	// gflie_example_copy.txt
}

CopyFile

  • 说明:复制文件
  • 格式: 

func CopyFile(src, dst string) (err error)

  • 示例:

func ExampleCopyFile() {
	// init
	var (
		srcFileName = "gflie_example.txt"
		srcTempDir  = gfile.TempDir("gfile_example_copy_src")
		srcTempFile = gfile.Join(srcTempDir, srcFileName)

		// copy file
		dstFileName = "gflie_example_copy.txt"
		dstTempFile = gfile.Join(srcTempDir, dstFileName)
	)

	// write contents
	gfile.PutContents(srcTempFile, "goframe example copy")

	// copy file
	gfile.CopyFile(srcTempFile, dstTempFile)

	// read contents after copy file
	fmt.Println(gfile.GetContents(dstTempFile))
	
	// Output:
	// goframe example copy
}

CopyDir

  • 说明:支持复制文件或目录
  • 格式: 

func CopyDir(src string, dst string) error 

  • 示例:

func ExampleCopyDir() {
	// init
	var (
		srcTempDir  = gfile.TempDir("gfile_example_copy_src")
		
		// copy file
		dstFileName = "gflie_example_copy.txt"
		dstTempFile = gfile.Join(srcTempDir, dstFileName)

		// copy dir
		dstTempDir = gfile.TempDir("gfile_example_copy_dst")
	)
	// read contents after copy file
	fmt.Println(gfile.GetContents(dstTempFile))

	// copy dir
	gfile.CopyDir(srcTempDir, dstTempDir)

	// list copy dir file
	fList, _ := gfile.ScanDir(dstTempDir, "*", false)
	for _, v := range fList {
		fmt.Println(gfile.Basename(v))
	}

	// Output:
	// gflie_example.txt
	// gflie_example_copy.txt
}

Move

  • 说明:将​src​重命名为​dst​。
  • 注意:如果​dst​已经存在并且是文件,将会被替换造成数据丢失!
  • 格式: 

func Move(src string, dst string) error 

  • 示例:

func ExampleMove() {
	// init
	var (
		srcPath = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
		dstPath = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file2")
	)
	// Check is file
	fmt.Println(gfile.IsFile(dstPath))

	//  Moves `src` to `dst` path.
	// If `dst` already exists and is not a directory, it'll be replaced.
	gfile.Move(srcPath, dstPath)

	fmt.Println(gfile.IsFile(srcPath))
	fmt.Println(gfile.IsFile(dstPath))

	// Output:
	// false
	// false
	// true
}

Rename

  • 说明:​Move​的别名,将​src​重命名为​dst​。
  • 注意:如果​dst​已经存在并且是文件,将会被替换造成数据丢失!
  • 格式: 

func Rename(src string, dst string) error

  • 示例:

func ExampleRename() {
	// init
	var (
		srcPath = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file2")
		dstPath = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)
	// Check is file
	fmt.Println(gfile.IsFile(dstPath))

	//  renames (moves) `src` to `dst` path.
	// If `dst` already exists and is not a directory, it'll be replaced.
	gfile.Rename(srcPath, dstPath)

	fmt.Println(gfile.IsFile(srcPath))
	fmt.Println(gfile.IsFile(dstPath))

	// Output:
	// false
	// false
	// true
}

Remove

  • 说明:删除给定路径的文件或文件夹。
  • 格式: 

func Remove(path string) error

  • 示例:

func ExampleRemove() {
	// init
	var (
		path = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)

	// Checks whether given `path` a file, which means it's not a directory.
	fmt.Println(gfile.IsFile(path))

	// deletes all file/directory with `path` parameter.
	gfile.Remove(path)

	// Check again
	fmt.Println(gfile.IsFile(path))

	// Output:
	// true
	// false
}

IsEmpty

  • 说明:检查给定的路径,如果是文件夹则检查是否包含文件,如果是文件则检查文件大小是否为空。
  • 格式: 

func IsEmpty(path string) bool 

  • 示例:

func ExampleIsEmpty() {
	// init
	var (
		path = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)

	// Check whether the `path` is empty
	fmt.Println(gfile.IsEmpty(path))

	// Truncate file
	gfile.Truncate(path, 0)

	// Check whether the `path` is empty
	fmt.Println(gfile.IsEmpty(path))

	// Output:
	// false
	// true
}

DirNames

  • 说明:获取给定路径下的文件列表,返回的是一个切片。
  • 格式: 

func DirNames(path string) ([]string, error)

  • 示例:

func ExampleDirNames() {
	// init
	var (
		path = gfile.TempDir("gfile_example_basic_dir")
	)
	// Get sub-file names of given directory `path`.
	dirNames, _ := gfile.DirNames(path)

	fmt.Println(dirNames)

	// May Output:
	// [file1]
}

Glob

  • 说明:模糊搜索给定路径下的文件列表,支持正则,第二个参数控制返回的结果是否带上绝对路径。
  • 格式: 

func Glob(pattern string, onlyNames ...bool) ([]string, error)

  • 示例:

func ExampleGlob() {
	// init
	var (
		path = gfile.Pwd() + gfile.Separator + "*_example_basic_test.go"
	)
	// Get sub-file names of given directory `path`.
	// Only show file name
	matchNames, _ := gfile.Glob(path, true)

	fmt.Println(matchNames)

	// Show full path of the file
	matchNames, _ = gfile.Glob(path, false)

	fmt.Println(matchNames)

	// May Output:
	// [gfile_z_example_basic_test.go]
	// [xxx/gf/os/gfile/gfile_z_example_basic_test.go]
}

Exists

  • 说明:检查给定的路径是否存在 。
  • 格式: 

func Exists(path string) bool

  • 示例:

func ExampleExists() {
	// init
	var (
		path = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)
	// Checks whether given `path` exist.
	fmt.Println(gfile.Exists(path))

	// Output:
	// true
}

Chdir

  • 说明:使用给定的路径,更改当前的工作路径。
  • 格式: 

func Chdir(dir string) error

  • 示例:

func ExampleChdir() {
	// init
	var (
		path = gfile.Join(gfile.TempDir("gfile_example_basic_dir"), "file1")
	)
	// Get current working directory
	fmt.Println(gfile.Pwd())

	// Changes the current working directory to the named directory.
	gfile.Chdir(path)

	// Get current working directory
	fmt.Println(gfile.Pwd())

	// May Output:
	// xxx/gf/os/gfile
	// /tmp/gfile_example_basic_dir/file1
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号