【问题标题】:How to remove the last N bytes from a file如何从文件中删除最后 N 个字节
【发布时间】:2019-06-26 01:10:29
【问题描述】:

我想从 Go 中的文件中删除最后 N 个字节,

【问题讨论】:

    标签: file go io


    【解决方案1】:

    其实这已经实现的是os.Truncate()函数。但是这个函数需要新的大小。因此,要使用它,您必须首先获取文件的大小。为此,您可以使用os.Stat()

    将其包装成一个函数:

    func truncateFile(name string, bytesToRemove int64) error {
        fi, err := os.Stat(name)
        if err != nil {
            return err
        }
    
        return os.Truncate(name, fi.Size()-bytesToRemove)
    }
    

    用它来删除最后 5000 个字节:

    if err := truncateFile("C:\\Test.zip", 5000); err != nil {
        fmt.Println("Error:", err)
    }
    

    另一种选择是为此使用File.Truncate() 方法。如果我们有一个os.File,我们也可以使用File.Stat() 来获取它的大小。

    这就是它的样子:

    func truncateFile(name string, bytesToRemove int64) error {
        f, err := os.OpenFile(name, os.O_RDWR, 0644)
        if err != nil {
            return err
        }
        defer f.Close()
    
        fi, err := f.Stat()
        if err != nil {
            return err
        }
    
        return f.Truncate(fi.Size() - bytesToRemove)
    }
    

    使用它是一样的。如果我们正在处理一个文件(我们已经打开它)并且我们必须截断它,这可能会更好。但在这种情况下,您需要将 os.File 而不是其名称传递给 truncateFile()

    注意:如果您尝试删除的字节数超过文件当前的字节数,truncateFile() 将返回错误。

    【讨论】:

    • 谢谢您,先生,现在可以了
    • @Pwn3rGamer 实际上这已经在os.Truncate() 中实现了。请参阅编辑后的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 2013-06-05
    • 1970-01-01
    • 2020-01-29
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多