可以返回CryptoStream并仍然正确处理所有内容吗?如果我有一个要传递给用户的CryptoStream,最简单的方法是publicStreamGetDecryptedFileStream(stringinputFile,byte[]key,byte[]iv){varfsCrypt=newFileStream(inputFile,FileMode.Open,FileAccess.Read,文件共享.Read);varrmCrypto=newRijndaelManaged();vartransform=rmCrypto.CreateDecryptor(key,iv);varcs=newCryptoStream(fsCrypt,transform,CryptoStreamMode.Read);返回CS;CryptoStream,底层的FileStream也将被释放。我遇到的问题是如何处理rmCrypto和转换?RijndaelManaged和ICryptoTransform是一次性类,但处理流不处理这两个对象。处理这种情况的正确方法是什么?我会考虑创建自己的包装流的类,然后您可以管理它们的处理。沿着这些线的东西(抱歉-不知道我头顶上的变换对象的类型)。publicCryptoStreamWrapper:Stream,IDisposable{publicCryptoStreamWrapper(CryptoStreamstream,RijndaelManagedrmCrypto,IDisposabletransform){this.transform=transform;this.rmCrypto=rmCrypto;this.transstream=流。();this.rmCrypto.Dispose();this.stream.Dispose();Ian击败了我的基本概念(投票),但CryptoStream本身并未密封,因此创建一个包含需要处理的类的分支是微不足道的。//////创建一个类,该类创建并包装所有关联对象的处置操作///classReturnableCryptoStream:CryptoStream{privatereadonlyICryptoTransform_transform;私有只读IDisposable_algorithm;publicReturnableCryptoStream(Streamstream,ICryptoTransformtransform,CryptoStreamModemode):this(stream,transform,mode,null){}publicReturnableCryptoStream(Streamstream,ICryptoTransformtransform,CryptoStreamModemode,IDisposablealgorithm):base(stream,transform,mode){}_transform=变换;_algorithmed=}tproectoverridevoidDispose(booldisposing){base.Dispose(disposing);如果(处置){如果(_transform!=null)_transform.Dispose();如果(_algorithm!=null)_algorithm.Dispose();}}}use和上面一样是C#学习教程:CanIreturnaCryptoStreamandstillhandleeverythingcorrectly?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicStreamGetDecryptedFileStream(stringinputFile,byte[]key,byte[]iv){varfsCrypt=newFileStream(inputFile,FileMode.Open,FileAccess.Read,FileShare.Read);varrmCrypto=newRijndaelManaged();vartransform=rmCrypto.CreateDecryptor(key,iv);varcs=newReturnableCryptoStream(fsCrypt,transform,CryptoStreamMode.Read,rmCrypto);返回CS;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
