为了账号安全,请及时绑定邮箱和手机立即绑定

golang 无法写入文本文件:句柄无效

golang 无法写入文本文件:句柄无效

Go
肥皂起泡泡 2021-10-11 10:49:55
再次大家好,我很抱歉这么快就问了另一个问题,但最近 Go 似乎是一件又一件的事情。我有一个可用的网页抓取工具(感谢大家的帮助),它可以从这个 wiki 页面获取我想要的所有信息:http : //monsterhunter.wikia.com/wiki/MH4U : _Item_List然后它显示我想要的一切,没有打嗝。但是,当我写入 .txt 文件时,我收到一条错误消息:“0 write mh4u.txt:句柄无效”这是我当前的代码供参考:package mainimport (    "fmt"    "log"    "github.com/PuerkitoBio/goquery"    "os"    "io")func main() {    filename := "mh4u.txt"    file, err := os.Create(filename)    if err!= nil {        fmt.Println(err)    }    doc, err := goquery.NewDocument("http://www.ign.com/wikis/monster-hunter-4/Items")    if err != nil {        log.Fatal(err)    }    doc.Find("tbody").Each(func(i int, s *goquery.Selection) {        s.Find("td").Each(func(j int, s2 *goquery.Selection) {            if s3 := s2.Find("img"); s3 != nil && s3.Length() > 0 {                return            }            fmt.Printf(s2.Text())            n, err := io.WriteString(file, s2.Text())            if err != nil {                fmt.Println(n, err)             }        })        file.Close()    })}用其他网站测试这段代码让我相信可能有一些隐藏的字符给作者带来了一些问题,但这是我唯一能猜到的。非常感谢您提供的任何建议/提示/解决方案!
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

你file.Close()在一个闭包内调用。如果doc.Find("tbody").Each被多次调用,您最终将尝试写入一个关闭的文件。您应该在创建文件后立即推迟关闭文件:


file, err := os.Create(filename)

if err != nil {

    log.Fatal(err)

}

defer file.Close()


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 330 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信