C#克隆Stream对象

时间:2018-08-09 10:02:33

标签: c# stream clone

我要克隆流对象。这是我的代码:

var fileContent = Request.Files[file];
if (fileContent != null && fileContent.ContentLength > 0) {
 byte[] data;
 using(Stream inputStream = fileContent.InputStream) {
  MemoryStream memoryStream = inputStream as MemoryStream;
  if (memoryStream == null) {
   memoryStream = new MemoryStream();
   inputStream.CopyTo(memoryStream);
  }
  data = memoryStream.ToArray();
 }
}

将内容复制到“ data”变量后,“ fileContent.InputStream”的长度将为0。如何将内容复制到“数据”字节数组并将内容仍保留在“ fileContent.InputStream”中?我尝试在使用前以某种方式克隆“ fileContent.InputStream”,但没有进行管理。

这是我的完整代码。内容是我的应用程序的许可证文件,并且我有一个负责文件验证的类。此类可以解密并验证它。它接收一个字节数组作为参数。我想克隆该流以便创建一个字节数组(并对其进行验证),如果有效,我想将“ fileContent.InputStream”保存为许可证文件。这就是为什么我要以某种方式克隆流的原因。

if (Request.Files.Count > 0)
        {
            foreach (string file in Request.Files)
            {
                var fileContent = Request.Files[file];
                if (fileContent != null && fileContent.ContentLength > 0)
                {
                    byte[] data;
                    using (Stream inputStream = fileContent.InputStream)
                    {
                        var memoryStream = inputStream as MemoryStream;
                        if (memoryStream == null)
                        {
                            memoryStream = new MemoryStream();
                            inputStream.CopyTo(memoryStream);
                        }
                        data = memoryStream.ToArray();
                    }
                    var decryptor = new LicenseEncryptorDecryptor();
                    decryptor.DecryptLicense(data);
                    if (decryptor.InvalidFile)
                    {
                        return Json(new {InvalidFile=true}, JsonRequestBehavior.AllowGet);
                    }

                    new FilesManager().SaveFile(fileContent.InputStream, fileContent.FileName, EFileType.License, true);
                }
            }
        }

0 个答案:

没有答案