2

我正在学习 Go,并试图读取文件的前四个字节。我想检查文件是否包含我正在寻找的特定文件头。不过,我的代码没有显示我期望的字节。有谁知道为什么下面的代码可能不起作用?它确实读取了一些字节,但它们不是我识别或期望看到的字节。它们不是随机的或任何东西,因为每次我运行它时它们都是相同的,所以它可能是指向其他东西或其他东西的指针。

另外,我意识到我忽略了错误,但那是因为我进入了 hack 模式,而这不起作用并尽可能多地删除了垃圾,试图解决这个问题。

package main

import (

    "os"
    "io"
    "fmt"

)

type RoflFile struct {

    identifier []byte

}

func main() {

    arguments := os.Args[1:]

    if len(arguments) != 1 {

        fmt.Println("Usage: <path-to-rofl>")
        return

    }

    inputfile := arguments[0]

    if _, err := os.Stat(inputfile); os.IsNotExist(err) {

        fmt.Printf("Error: the input file could not be found: %s", inputfile)
        return

    }

    rofl := new(RoflFile)
    rofl.identifier = make([]byte, 4)

    // open the input file so that we can pull out data
    f, _ := os.Open(inputfile)

    // read in the file identifier
    io.ReadAtLeast(f, rofl.identifier, 4)

    f.Close()

    fmt.Printf("Got: %+v", rofl)

}
4

1 回答 1

6

当我针对以“9876”开头的输入文件运行您的代码时,我得到:

得到:&{标识符:[57 56 55 54]}

当针对以“1234”开头的输入文件运行时,我得到:

得到:&{标识符:[49 50 51 52]}

对我来说,该程序按预期工作。要么你的系统出了问题,要么你没有意识到你正在获取文件中前四个字节的十进制值。你期待十六进制吗?或者您是否希望看到根据某种编码解释的字节(例如,ASCII 或 UTF-8,看到“9 8 7 6”而不是“57 56 55 54”)?

为了将来参考(或者如果这没有回答您的问题),在这些情况下包含您的输入文件、您在系统上获得的输出以及您期望的输出会很有帮助。“它们不是我认识或期望看到的字节”在桌面上留下了很多可能性。

于 2013-05-23T23:34:26.963 回答