Golang访问Windows共享文件夹的方法
Golang访问Windows共享文件夹的方法 您好,
有没有办法访问 Windows 服务器上的共享文件夹?我需要读取一些 xls 文档…
谢谢
6 回复
你是否尝试过直接指定文件路径来打开它?
更多关于Golang访问Windows共享文件夹的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
由于使用cifs实现这个功能非常简单,我不打算再花时间研究Go语言的解决方案。谢谢
这将是我最后的手段,我想用Go代码完成所有操作,但如果不行,为什么还要尝试挂载文件夹并访问它呢
在Go语言中我不太确定,但谷歌搜索显示有一个项目:https://github.com/stacktitan/smb,同时搜索"golang smb client"还能得到更多结果。
不过你是否尝试过先挂载共享,然后使用Go语言常规的文件操作方法呢?
在Go语言中,可以通过标准库的os包或第三方库来访问Windows共享文件夹(SMB/CIFS协议)。这里提供两种常用方法:
方法一:使用标准库(直接挂载路径)
如果共享文件夹已映射为网络驱动器(例如Z:),或可通过UNC路径(如\\server\share)访问,可以直接使用os.Open:
package main
import (
"fmt"
"os"
)
func main() {
// 使用UNC路径或映射驱动器
file, err := os.Open(`\\server\share\file.xls`)
if err != nil {
panic(err)
}
defer file.Close()
// 读取文件内容
data := make([]byte, 1024)
n, err := file.Read(data)
if err != nil {
panic(err)
}
fmt.Printf("读取 %d 字节\n", n)
}
方法二:使用第三方SMB库
对于需要身份验证的共享,推荐使用github.com/hirochachacha/go-smb2:
- 安装库:
go get github.com/hirochachacha/go-smb2
- 示例代码:
package main
import (
"fmt"
"net"
"github.com/hirochachacha/go-smb2"
)
func main() {
conn, err := net.Dial("tcp", "windows-server:445")
if err != nil {
panic(err)
}
defer conn.Close()
d := &smb2.Dialer{
Initiator: &smb2.NTLMInitiator{
User: "username",
Password: "password",
Domain: "domain", // 若没有域则留空
},
}
s, err := d.Dial(conn)
if err != nil {
panic(err)
}
defer s.Logoff()
// 挂载共享
share, err := s.Mount("sharename")
if err != nil {
panic(err)
}
defer share.Umount()
// 读取文件
file, err := share.Open("file.xls")
if err != nil {
panic(err)
}
defer file.Close()
// 读取文件内容
buf := make([]byte, 1024)
n, err := file.Read(buf)
if err != nil {
panic(err)
}
fmt.Printf("读取 %d 字节: %s\n", n, buf[:n])
}
注意:
- 方法二需要处理NTLM认证,适用于需要用户名/密码的共享
- 确保防火墙允许445端口(SMB默认端口)
- 实际路径需替换为真实的服务器地址、共享名和文件路径
两种方法均可读取xls文件,选择取决于共享文件夹的访问权限配置。


