首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过NetworkStream传输存档

通过NetworkStream传输存档
EN

Stack Overflow用户
提问于 2012-02-13 13:31:56
回答 1查看 244关注 0票数 0

我想通过TCP连接复制目录树。源端应该从文件系统的某个地方开始,递归地收集所有文件,并通过NetworkStream将它们发送到接收器端。这看起来有点像我可以在源端创建一个ZIP文件,并将其发送到客户端。但也有一些要求:

  • 不应该创建任何临时文件
  • ,也不应该在内存
  • 中创建任何文件,数据应该在带内发送。

前两个需求可以通过NetworkStream发送一个ZIP存档来满足。由于访问权限问题,应避免临时文件。目录树可以包含大量的数据,这会导致内存不足的问题。第三个要求更复杂一些。源和接收器之间只应建立一个TCP连接。

该协议在数据传输之前使用相同的连接来交换像目录名这样的元信息,在数据传输之后至少确认成功的传输,并且数据已经写入文件系统。

我已经试过SharpZipLib了。但是,在读取流时,它总是读取4 KByte的块。它需要流的结束来标识ZIP存档的结束。这是不合适的,因为档案应该在乐队内。

DotNetZip库文档提到,它需要一个可查找的流,这对于NetworkStream来说是不可用的。

如何转移这种目录结构?

编辑澄清了文件数据必须嵌入在同一个TCP流中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-14 17:34:38

你是对的,DotNetZip似乎不直接支持不可查找的流。但是它需要这样做的唯一原因是因为它需要知道不可查找的流不支持的Position

要解决这个问题,只需将NetworkStream包装在CountingStream中,作为DotNetZip的一部分提供。如果这样做,您应该能够很好地使用ZipOutputStream

作为另一种选择,如果您不需要压缩,您可以创建自己的类tar协议。

有点像

  • 4字节表示文件名的长度,包括path (M)
  • 8字节表示文件名的长度(N)
  • M字节(包括文件名)。),使用UTF-8
  • N字节对文件本身的内容

进行编码。

在每一份文件之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9261428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档