Go语言如何调用文本编辑器打开指定文件?
报错原因
exec.Command 第一个入参要求为可执行程序的路径,你直接传入了文本文件路径,系统将txt文件识别为可执行程序尝试运行,自然会抛出「不是有效的Win32应用」的错误。
修复方案
调用Notepad打开目标文件实现
直接将第一个参数改为记事本程序的启动名,待打开的文件作为第二个参数传入即可,示例代码如下:
filePath := "H:/code/txt_projects/hello6.txt" // 传入可执行程序notepad.exe,第二个参数为待打开的文件路径 cmd := exec.Command("notepad.exe", filePath) // 若不需要将记事本的输入输出绑定到当前终端,可删除以下三行配置 cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Start() if err != nil { fmt.Printf("启动记事本失败: %s\n", err) return } // 若不需要等待用户关闭记事本再执行后续逻辑,可删除以下Wait相关代码 fmt.Printf("等待用户关闭记事本...\n") err = cmd.Wait() fmt.Printf("记事本运行结束,错误信息: %v\n", err)
可选:跨平台通用打开方案
如果你的CLI工具需要兼容多平台,不想绑定Notepad,也可以调用系统默认程序打开对应文件:
- Windows:
exec.Command("cmd.exe", "/c", "start", filePath) - macOS:
exec.Command("open", filePath) - Linux:
exec.Command("xdg-open", filePath)
原代码逻辑说明
你找到的这段代码的作用是启动指定可执行程序,将程序的标准输入、输出、错误流都绑定到当前终端,启动完成后阻塞等待程序运行结束再继续执行后续代码,本身逻辑没有问题,仅参数使用错误导致报错。
内容的提问来源于stack exchange,提问作者scottdomini
相关产品推荐
相关产品推荐

