Golang在Windows网络驱动器上创建目录失败
Golang在Windows网络驱动器上创建目录失败 我的问题与这个 issue 非常接近 [os: IsDir doesn’t work with Windows OneDrive #22579] https://github.com/golang/go/issues/22579
因此,我自己从源码安装了 Go。 D:>go version go version devel +c99300229d Mon Jun 18 23:20:57 2018 +0000 windows/amd64
我希望"在Windows网络驱动器上创建目录失败"的问题应该能在最新的 Golang 源码构建中得到修复。 但根据我的测试,仍然显示"系统找不到指定的路径"。 我想知道 Golang 是否仍然不支持在 Windows 网络驱动器上创建目录?
我的 test.go 源代码并在 Windows 10 上运行:
func main() {
src := "w:\a\b\c" // w: 是映射的 Windows 网络驱动器
err2 := os.MkdirAll(src, os.ModePerm)
if err2 != nil {
fmt.Println(err2)
} else {
fmt.Println("create ok: " + src)
}
}
非常感谢。
此致, Bowman
更多关于Golang在Windows网络驱动器上创建目录失败的实战教程也可以访问 https://www.itying.com/category-94-b0.html
抱歉,请忽略我之前的问题。问题已经解决了。
在我使用Windows命令’net use’检查后,发现我的W:网络驱动器映射不在列表中,但在Windows资源管理器中显示。因此我手动执行了’net use w: \remote-server-ip\myfolder’命令来映射网络驱动器。
现在,我可以通过我的test.go源代码在Windows网络驱动器上成功创建目录了。
非常感谢。
此致, Bowman
更多关于Golang在Windows网络驱动器上创建目录失败的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Windows 网络驱动器上创建目录失败的问题确实与 Go 语言对 Windows 文件系统路径的处理有关。虽然您使用了最新源码构建的 Go 版本,但问题可能源于路径格式或权限问题。以下是针对您代码的分析和修改建议:
首先,确保网络驱动器 w:\ 已正确映射并可访问。然后,使用以下改进的代码示例,它包含了更健壮的错误处理和路径验证:
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
src := "w:\\a\\b\\c" // 使用双反斜杠或原始字符串处理 Windows 路径
// 检查路径是否以网络驱动器格式开头
if !strings.HasPrefix(src, "w:\\") {
fmt.Println("路径格式错误:必须使用网络驱动器路径")
return
}
// 使用 MkdirAll 创建目录,包括所有父目录
err := os.MkdirAll(src, os.ModePerm)
if err != nil {
fmt.Printf("创建目录失败: %v\n", err)
// 检查父目录是否存在
parentDir := filepath.Dir(src)
if _, err := os.Stat(parentDir); os.IsNotExist(err) {
fmt.Printf("父目录不存在: %s\n", parentDir)
}
} else {
fmt.Printf("目录创建成功: %s\n", src)
}
}
如果上述代码仍然失败,可以尝试使用 UNC 路径格式直接访问网络共享,而不是映射的驱动器:
package main
import (
"fmt"
"os"
)
func main() {
// 使用 UNC 路径替代映射驱动器
// 将 w:\ 替换为 \\server\share\
src := "\\\\server\\share\\a\\b\\c" // 替换为实际的服务器和共享名
err := os.MkdirAll(src, os.ModePerm)
if err != nil {
fmt.Printf("使用 UNC 路径创建目录失败: %v\n", err)
// 检查网络连接和权限
if _, err := os.Stat("\\\\server\\share"); err != nil {
fmt.Printf("无法访问网络共享: %v\n", err)
}
} else {
fmt.Printf("使用 UNC 路径创建目录成功: %s\n", src)
}
}
另外,可以添加更详细的错误诊断:
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
src := "w:\\a\\b\\c"
err := os.MkdirAll(src, os.ModePerm)
if err != nil {
fmt.Printf("错误类型: %T\n", err)
// 获取系统错误代码
if pathErr, ok := err.(*os.PathError); ok {
if sysErr, ok := pathErr.Err.(syscall.Errno); ok {
fmt.Printf("系统错误代码: %d\n", sysErr)
}
}
// 尝试创建单个目录进行诊断
testDir := "w:\\test_dir"
if err := os.Mkdir(testDir, os.ModePerm); err != nil {
fmt.Printf("创建测试目录失败: %v\n", err)
} else {
fmt.Printf("测试目录创建成功,清理中...\n")
os.Remove(testDir)
}
} else {
fmt.Printf("目录创建成功: %s\n", src)
}
}
这些代码示例提供了不同的方法来诊断和解决在 Windows 网络驱动器上创建目录的问题。如果问题持续存在,可能需要检查网络驱动器的连接状态、权限设置或考虑使用 UNC 路径作为替代方案。

