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

再次大家好,


我很抱歉这么快就问了另一个问题,但最近 Go 似乎是一件又一件的事情。


我有一个可用的网页抓取工具(感谢大家的帮助),它可以从这个 wiki 页面获取我想要的所有信息:http : //monsterhunter.wikia.com/wiki/MH4U : _Item_List


然后它显示我想要的一切,没有打嗝。但是,当我写入 .txt 文件时,我收到一条错误消息:“0 write mh4u.txt:句柄无效”


这是我当前的代码供参考:


package main


import (

    "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()

    })

}

用其他网站测试这段代码让我相信可能有一些隐藏的字符给作者带来了一些问题,但这是我唯一能猜到的。


非常感谢您提供的任何建议/提示/解决方案!


肥皂起泡泡
浏览 333回答 1
1回答

缥缈止盈

你file.Close()在一个闭包内调用。如果doc.Find("tbody").Each被多次调用,您最终将尝试写入一个关闭的文件。您应该在创建文件后立即推迟关闭文件:file, err := os.Create(filename)if err != nil {    log.Fatal(err)}defer file.Close()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go