You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言TCP服务器无法写入文件求助(已创建文件)

解决Go TCP服务器无法写入output.txt的问题

嘿,我来帮你搞定这个写文件的小问题!结合你给出的代码片段,咱们一步步排查:

  • 先盯紧文件名和路径
    你代码里的ioutil.WriteFile看起来写到一半截断成"ou..."了,首先得确保文件名是完整的"output.txt"。另外要注意程序运行的工作目录——有时候你以为文件会生成在代码所在文件夹,但实际可能跑到了终端当前的工作目录里,找不到文件的话可以先全局搜一下output.txt的位置确认。

  • 必须补上错误处理!
    你现在的代码里,conn.Read的错误只打印不返回,ioutil.WriteFile更是完全没处理错误,这就像开车不看仪表盘,出问题了都不知道为啥。给你改了下代码,加上关键的错误处理和连接关闭:

    func handleRequest(conn net.Conn) {
        defer conn.Close() // 用完连接记得关掉,好习惯!
        buf := make([]byte, 1024)
        size, err := conn.Read(buf)
        if err != nil {
            fmt.Println("读取数据出错:", err.Error())
            return // 读错了就别往下走了,避免白忙活
        }
        s := string(buf[:size])
        fmt.Println("收到客户端数据:", s)
        
        // 确保文件名是完整的output.txt
        err = ioutil.WriteFile("output.txt", []byte(s), 0644)
        if err != nil {
            fmt.Println("写入文件出错:", err.Error())
            return
        }
        fmt.Println("数据成功写入output.txt啦!")
    }
    

    加上WriteFile的错误打印后,就能直接看到问题根源——比如权限不够、磁盘满了、路径不存在之类的。

  • 确认数据真的被读进来了
    conn.Read一次最多读1024字节,如果客户端发的内容超过这个大小,或者网络原因只读到了空数据,那写进文件的内容自然是空的。可以改成循环读取,确保把客户端发的所有数据都收齐:

    func handleRequest(conn net.Conn) {
        defer conn.Close()
        var data []byte
        buf := make([]byte, 1024)
        for {
            n, err := conn.Read(buf)
            if err != nil {
                if err != io.EOF {
                    fmt.Println("读取数据出错:", err)
                }
                break
            }
            data = append(data, buf[:n]...)
        }
        s := string(data)
        fmt.Println("收到完整数据:", s)
        
        err := ioutil.WriteFile("output.txt", []byte(s), 0644)
        if err != nil {
            fmt.Println("写入文件出错:", err.Error())
            return
        }
    }
    
  • 检查文件权限
    你设置的文件权限是0644,要确保运行程序的用户有写入当前目录的权限。比如在Linux/macOS上,如果是系统目录,普通用户可能没权限,可以试试用sudo运行程序;Windows的话,检查一下文件夹是不是被设成了只读模式。

内容的提问来源于stack exchange,提问作者Ilya Savitsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:56:28