golang 的io与os包中的常用方法

发布于:2025-03-31 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

I/O 和 OS 方法概述

文件读取与写入

文件和目录管理

环境变量

其他系统交互


I/O 和 OS 方法概述

文件读取与写入
  • io.ReadAll

    • 用于从Reader接口读取所有数据并返回一个字节切片。
    bytes, err := io.ReadAll(file)
  • os.Open

    • 打开一个文件用于读取。如果操作成功,则返回一个指向File的指针;如果失败,则返回错误。
    file, err := os.Open("os/1.txt")
  • os.OpenFile

    • 更通用的打开文件的方式,允许指定标志(如只读、读写等)和权限模式。
    file, _ = os.OpenFile("os/1.txt", os.O_RDONLY, 0644)
  • os.Create

    • 创建一个新文件用于写入,如果文件已存在则会被截断。
    file, _ = os.Create("os/2.txt")
  • file.WriteString

    • 向文件写入字符串,并返回写入的字节数。
    n, _ := file.WriteString("hello world")
文件和目录管理
  • os.Remove

    • 删除一个文件或目录。
    _ = os.Remove("os/2.txt")
  • os.Stat

    • 获取文件的信息,包括大小、修改时间等。
    fileInfo, err := os.Stat("os/1.txt")
环境变量
  • os.Setenv

    • 设置环境变量的值。
    os.Setenv("a", "A")
  • os.Environ

    • 返回所有环境变量的列表,每个元素格式为"key=value"
    for _, env := range os.Environ() {
        fmt.Println(env)
    }
其他系统交互
  • os.Getwd

    • 获取当前工作目录的路径。
    fmt.Println(os.Getwd())
  • os.Getpid

    • 获取当前进程的ID。
    fmt.Println(os.Getpid())
  • os.Getppid

    • 获取父进程的ID。
    fmt.Println(os.Getppid())
  • os.TempDir

    • 返回临时目录的路径。
    fmt.Println(os.TempDir())

这些方法提供了对文件系统的访问、环境变量的管理以及与其他操作系统功能的交互能力,是Go语言进行系统编程的重要工具。

package main

import (
	"fmt"
	"io"
	"log"
	"os"
)

func main() {
	// io.Copy
	// 打开文件
	file, err := os.Open("os/1.txt")
	if err != nil {
		log.Fatalf("failed to open file: %v", err)
	}
	defer file.Close()
	// 读取文件内容
	bytes, err := io.ReadAll(file) // 使用 io.ReadAll 替代 ioutil.ReadAll
	if err != nil {
		log.Fatalf("failed to read file: %v", err)
	}
	fmt.Println(string(bytes))

	//文件操作
	//os.Open(name string) (file *File, err error):打开一个文件用于读取。
	file, _ = os.Open("os/1.txt")
	defer file.Close()
	//fmt.Println(file.Name())
	//bytes, _ := ioutil.ReadAll(file) // ioutil.ReadAll已弃用
	bytes, _ = io.ReadAll(file)
	fmt.Println(string(bytes))

	// os.OpenFile()
	file, _ = os.OpenFile("os/1.txt", 1, 1)
	//f, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

	//os.Create(name string) (file *File, err error):创建一个新文件用于写入,如果文件已存在则会被截断。
	file, _ = os.Create("os/2.txt")
	n, _ := file.WriteString("hello world")
	fmt.Println(n)

	//os.Remove(name string) error:删除一个文件或目录。
	_ = os.Remove("os/2.txt")

	//os.Rename(oldpath, newpath string) error:重命名(或移动)一个文件或目录。

	//os.Stat(name string) (fi FileInfo, err error):获取文件的信息,如大小、修改时间等。
	fileInfo, err := os.Stat("os/1.txt") // 获取文件信息
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	fmt.Println("File name:", fileInfo.Name())
	fmt.Println("Size:", fileInfo.Size())
	fmt.Println("Permissions:", fileInfo.Mode())
	fmt.Println("Last modified:", fileInfo.ModTime())
	fmt.Println("Is directory:", fileInfo.IsDir())

	//os.Chdir(dir string) error:改变当前工作目录。

	//环境变量
	//os.Getenv(key string) string:获取环境变量的值。

	//os.Setenv(key, value string) error:设置环境变量的值。
	os.Setenv("a", "A")
	os.Setenv("b", "B")
	//os.Environ() []string:返回所有环境变量的列表,格式为 "key=value"。
	for _, env := range os.Environ() {
		fmt.Println(env)
	}

	//执行命令
	//os.StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error):启动一个新的进程。
	//argv := []string{"echo", "Hello world!"}
	//attr := &os.ProcAttr{
	//	Files: []*os.File{nil, os.Stdout, os.Stderr},
	//	Sys:   &syscall.SysProcAttr{},
	//}
	 启动新进程
	//process, _ := os.StartProcess(argv[0], argv, attr)
	//fmt.Println(process.Pid)

	//os.Executable() (string, error):返回当前执行程序的路径。

	//其他
	//os.Exit(code int):退出当前程序,并返回状态码给操作系统。

	//os.Getwd() (dir string, err error):获取当前工作目录的路径。
	fmt.Println(os.Getwd())

	//os.Getpid() int:获取当前进程的ID。
	fmt.Println(os.Getpid())

	//os.Getppid() int:获取父进程的ID。
	fmt.Println(os.Getppid())

	//os.TempDir() string:返回临时目录的路径。
	fmt.Println(os.TempDir())
}