亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從文件讀取時如何查找EOF

從文件讀取時如何查找EOF

Go
滄海一幻覺 2021-05-13 14:01:45
我正在使用以下代碼在Go中讀取文件:spoon , err := ioutil.ReadFile(os.Args[1])if err!=nil {        panic ("File reading error")}現在,我檢查選擇的每個字節是什么字符。例如:spoon[i]==' ' //for checking space同樣,我讀取了整個文件(我知道也許還有其他讀取方式),但是保持這種方式完好無損,我怎么能知道已經達到文件的EOF并應該停止進一步讀取呢?請不要建議找到的長度spoon并開始循環。我想要找到EOF的可靠方法。
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

使用io.EOF到測試結束文件。例如,要計算文件中的空格:


package main


import (

    "fmt"

    "io"

    "os"

)


func main() {

    if len(os.Args) <= 1 {

        fmt.Println("Missing file name argument")

        return

    }

    f, err := os.Open(os.Args[1])

    if err != nil {

        fmt.Println(err)

        return

    }

    defer f.Close()

    data := make([]byte, 100)

    spaces := 0

    for {

        data = data[:cap(data)]

        n, err := f.Read(data)

        if err != nil {

            if err == io.EOF {

                break

            }

            fmt.Println(err)

            return

        }

        data = data[:n]

        for _, b := range data {

            if b == ' ' {

                spaces++

            }

        }

    }

    fmt.Println(spaces)

}


查看完整回答
反對 回復 2021-05-31
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

ioutil.ReadFile()將文件的全部內容讀取到一個字節片中。您無需擔心EOF。當您一次讀取一個文件塊時,EOF是一種必需的構造。一次讀取一個塊時,您需要知道哪個塊已到達文件末尾。


ioutil.ReadFile()您所需要的只是返回的字節片的長度。


data := ioutil.ReadFile(os.Args[1])


// Do we need to know the data size?

slice_size := len(data)


// Do we need to look at each byte?

for _,byte := range data {

    // do something with each byte

}


查看完整回答
反對 回復 2021-05-31
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

使用時ioutil.ReadFile(),從設計上講,您永遠不會看到io.EOF,因為ReadFile會讀取整個文件,直到達到EOF為止。因此,它返回的切片整個文件。從文檔中:

ReadFile讀取以文件名命名的文件并返回內容。成功的調用將返回err == nil,而不是err == EOF。因為ReadFile讀取整個文件,所以它不會將Read中的EOF視為要報告的錯誤。

從您的問題中,您明確提到,您知道還有其他讀取文件的方法,其中一些方法要求您測試io.EOF的錯誤,而不是ReadFile。

然后,使用您擁有的切片,就可以使用for ... range構造讀取文件,就像其他人提到的那樣。這是讀取整個文件的肯定方法,僅此而已(同樣,ReadFile會負責)?;蛘邚?迭代到len(spoon)-1也可以,但是range更慣用,并且基本上是相同的。

換句話說:到達切片的末尾時,您到達文件的末尾(前提是ReadFile沒有返回錯誤)。


查看完整回答
反對 回復 2021-05-31
  • 3 回答
  • 0 關注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號