为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Go中动态获取文件长度?

如何在Go中动态获取文件长度?

Go
富国沪深 2023-02-14 15:38:07
我有以下代码片段:func main() {    // Some text we want to compress.    original := "bird and frog"        // Open a file for writing.    f, _ := os.Create("C:\\programs\\file.gz")        // Create gzip writer.    w := gzip.NewWriter(f)        // Write bytes in compressed form to the file.    while ( looping over database cursor) {       w.Write([]byte(/* the row from the database as obtained from cursor */))    }        // Close the file.    w.Close()        fmt.Println("DONE")}但是,我想知道一个小的修改。当文件的大小达到某个阈值时,我想关闭它并打开一个新文件。这也是压缩格式。例如:假设一个数据库有 10 行,每行 50 字节。假设压缩因子为2,即1行50字节压缩为25字节。假设文件大小限制为 50 字节。这意味着在每 2 条记录之后我应该关闭文件并打开一个新文件。如何在文件仍然打开并向其写入压缩文件时跟踪文件大小?
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

gzip.NewWriter需要一个io.Writer。很容易实现io.Writer你想要的定制。

例如游乐场

type MultiFileWriter struct {

    maxLimit      int

    currentSize   int

    currentWriter io.Writer

}


func (m *MultiFileWriter) Write(data []byte) (n int, err error) {

    if len(data)+m.currentSize > m.maxLimit {

        m.currentWriter = createNextFile()

    }

    m.currentSize += len(data)

    return m.currentWriter.Write(data)

}

注意:您将需要处理一些边缘情况,例如 iflen(data)大于maxLimit. 并且您可能不想跨文件拆分记录。


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号