doushou3814 2015-06-02 09:32 采纳率: 100%
浏览 195
已采纳

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

Hello again everybody,

I apologize for asking another question so soon, but it just seems to be one thing after another with Go lately.

I have a working web page scraper (thanks to everybody's help) that grabs all the info I want from this wiki page: http://monsterhunter.wikia.com/wiki/MH4U:_Item_List

It then displays everything I want, no hiccups. However, when I go to write to a .txt file I get an error stating: "0 write mh4u.txt: The handle is invalid"

Here is my current code for reference:

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

Testing this code with other web sites leads me to believe that there is maybe some hidden characters that is giving the writer some issues, but that's the only thing I can guess.

Thanks so much for any suggestions/tips/solutions you can offer!

  • 写回答

1条回答 默认 最新

  • dongsuichi6529 2015-06-02 09:39
    关注

    You're calling file.Close() inside a closure. If doc.Find("tbody").Each is called more than one time, you'll end up trying to write to a closed file. You should defer the file closing right after you've created it:

    file, err := os.Create(filename)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料