当前位置: 首页 > article >正文

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

目录

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


http://www.kler.cn/a/623256.html

相关文章:

  • VITA 模型解读,实时交互式多模态大模型的 pioneering 之作
  • HarmonyOs学习 实验六:tabs标签与Swiper轮播图页面设计
  • 2023年3月全国计算机等级考试真题(二级C语言)
  • 【算法】并查集基础讲解
  • TCP协议与wireshark抓包分析
  • 现代优雅杂志海报徽标设计手写英文字体安装包 Attomes – Brush Handwritten Font
  • 【Prompt实战】邮件意图分类助手
  • git | 版本切换的相关指令
  • 深度学习入门(二):从感知机到神经网络
  • (三)物理设备
  • 创作领域“<em >一</em><em>分</em><em>快</em><em>3</em><em>官</em><em>网
  • 关于参加CSP-J/S认证需符合年龄条件的公告(2025年起)
  • 漏洞挖掘---灵当CRM客户管理系统getOrderList SQL注入漏洞
  • 保存预测图像时出现的文件名错误
  • Kubernetes 存储
  • NQA 网络质量分析协议
  • uniapp uni-swipe-action滑动内容排版改造
  • 未来已来,机器人周边行业和配套业务方向
  • QtWebApp使用
  • Cursor软件设置中文版教程