Go 将围棋中的io.ReadCloser转换为io.Reader
我正在使用Go 将围棋中的io.ReadCloser转换为io.Reader,go,zip,reader,writer,Go,Zip,Reader,Writer,我正在使用archive/zip库,在上传到s3之前,我需要动态修改zip存档中的文件。目前,我正在返回一个io.ReadCloser,但我用来修改用户的函数需要一个io.Reader: //Function Signature: Convert(r io.Reader, w io.Writer, ...) 我还需要一个io.Writer。。。如果你能帮我决定如何创建一个作家,我会给你加分。下面是一些示例代码,可以提供一些上下文: for _, f := range r.File {
archive/zip
库,在上传到s3之前,我需要动态修改zip存档中的文件。目前,我正在返回一个io.ReadCloser
,但我用来修改用户的函数需要一个io.Reader
:
//Function Signature:
Convert(r io.Reader, w io.Writer, ...)
我还需要一个io.Writer
。。。如果你能帮我决定如何创建一个作家,我会给你加分。下面是一些示例代码,可以提供一些上下文:
for _, f := range r.File {
if filepath.Ext(f.Name) != ".txt" {
_, filename := path.Split(f.Name)
var rc io.ReadCloser
if rc, err = f.Open(); err == nil {
// FIXME: Convert
if err = Convert(rc.Reader, *zip.Writer.Create(f.Name), ...); err != nil {
errStr := fmt.Sprintf("Unable to convert")
log.Println(errStr)
} else {
log.Println("Success!")
}
// Upload to s3
.....
}
}
}
io.ReadCloser
转换为io.Reader
,需要执行以下操作:
没什么李>
io.ReadCloser
已经是io.Reader
,因为io.Reader
接口的所有方法(特别是Read(p[]字节)(n int,err error)
方法)也由io.ReadCloser
提供
io.Reader
转换为io.Writer
是完全不同的事情。一般来说,你不可能做到这一点。你需要详细说明你想做什么实现
io.ReadCloser
接口的类型也实现了io.Reader
接口,因此这种类型的值不需要转换为io.Reader
。编写器很多。是否要写入文件?缓冲区?网络连接?史都?试着用谷歌搜索“GoWrite to”和你想写的任何东西。这取决于你想把数据写到哪里。例如,*os.File
实现了这里提到的所有接口,包括io.Writer
,因此,您可以打开另一个文件,将(未)压缩的数据写入其中。@NoahGary,如果您询问是否可以修改(通过更改或添加几个字节)或转换(通过将所有字节从A完全转换为B)在一个zip存档中的个人文件,而不必首先解压缩文件,然后,在修改之后,把它们归档,然后我不知道答案,但是你应该考虑重新设置你的问题,因为现在它不清楚你在问什么,而且标题中的问题部分已经被RES。已解决。我可能会删除这个问题,因为它是我刚才提到的问题的副本。我知道我现在需要做什么。只是希望我可以修改存档,而不是解压缩和重新压缩。但这也很好。我明白为什么现在不可能做到这一点。