我一直在尝试一个我认为很简单的想法。我希望能够从某个地方(网站、文件系统、ftp)读取文件,对其执行一些操作(压缩、加密等),然后将其保存在某个地方(可能是文件系统、ftp 或其他任何地方) 。这是基本的管道设计。我想做的就是读入文件并将其放入 MemoryStream 中,然后对 MemoryStream 中的数据执行操作,然后将该数据保存在 MemoryStream 中的某个位置。我想我可以使用相同的 Stream 来执行此操作,但遇到了几个问题:
- 每次我使用 StreamWriter 或 StreamReader 时,我都需要关闭它,从而关闭流,以便我无法再使用它。看来必须有某种方法来解决这个问题。
- 其中一些文件可能很大,因此如果我尝试立即读取整个文件,我可能会耗尽内存。
我希望能够将每个步骤作为单独的线程旋转,并在流上有数据时立即开始压缩步骤,然后一旦压缩在流上有一些可用的压缩数据,我就可以开始保存它(例如)。使用 C# Streams 可以轻松实现这样的事情吗?有人有关于如何最好地实现这一目标的想法吗?
Thanks,
Mike
使用辅助方法来驱动流:
static public void StreamCopy(Stream source, Stream target)
{
byte[] buffer = new byte[8 * 1024];
int size;
do
{
size = source.Read(buffer, 0, 8 * 1024);
target.Write(buffer, 0, size);
} while (size > 0);
}
您可以轻松组合您需要的任何内容:
using (FileStream iFile = new FileStream(...))
using (FileStream oFile = new FileStream(...))
using (DeflateStream oZip = new DeflateStream(outFile, CompressionMode.Compress))
StreamCopy(iFile, oZip);
根据您实际想要执行的操作,您可以以不同的方式链接流。这也使用相对较少的内存,因为只有正在操作的数据位于内存中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)