当对象需要文件名时,是否可以替换MemoryStream或StreamReader?(C#/.NET)

当对象需要文件名时,是否可以替换MemoryStream或StreamReader?(C#/.NET),c#,.net,C#,.net,假设您在需要文件名的第三方密封组件上有一个方法或属性。您没有第三方组件的源。您希望该组件在您拥有的文件上执行它应该执行的操作(只读),但您的文件在磁盘上是加密的,并且您只希望在内存中使用解密版本,这样就无法轻松地以普通形式复制它 有没有可能创建一个包装器或其他方法来欺骗组件,使其在实际读取内存流时认为自己在读取文件?还是完全不可能?可以在.NET之外的本地Windows代码中完成吗 谢谢 有没有可能创建一个包装器或其他方法来欺骗用户 组件在实际读取时认为它正在读取文件 从记忆流中 不,对不起。您

假设您在需要文件名的第三方密封组件上有一个方法或属性。您没有第三方组件的源。您希望该组件在您拥有的文件上执行它应该执行的操作(只读),但您的文件在磁盘上是加密的,并且您只希望在内存中使用解密版本,这样就无法轻松地以普通形式复制它

有没有可能创建一个包装器或其他方法来欺骗组件,使其在实际读取内存流时认为自己在读取文件?还是完全不可能?可以在.NET之外的本地Windows代码中完成吗

谢谢

有没有可能创建一个包装器或其他方法来欺骗用户 组件在实际读取时认为它正在读取文件 从记忆流中


不,对不起。您必须将该文件解密为临时文件,然后将该临时文件传递给插件。一旦它完成工作,删除临时文件。

这个简短的答案是如果组件需要文件名,例如字符串,则无法将其解析为内存流

但是,如果文件是用加密文件系统(EFS)或Windows本机加密的,则它可能能够在不知道文件已加密的情况下解密文件

这些可能有助于:


你不能像你建议的那样做,不。我的建议是使用windows内置的功能。通过这种方式,文件以加密形式存储在磁盘上,但可以通过普通IO方法访问应用程序(前提是运行应用程序的帐户可以访问该文件)。

您可以查看。我还没有试过,但这是一种在.Net中创建虚拟文件系统的方法。

它可以从“CON”中读取作为输入的内容(如许多文本实用程序grep/findstr等)?在这种情况下,您可以尝试重定向输入/输出流,并以这种方式提供结果。

您可以创建内存中的磁盘驱动器(通过代码或使用第三方应用程序)并将文件放入其中。另一种方法是实现虚拟文件系统并处理所有文件请求。这两种方法都是可能的,例如使用我们的产品


另外,我并不特别了解.NET,但在Windows中,您可以钩住API函数并替换某些操作(包括文件操作)。甚至有这样的组件,但我不知道它们是否为.NET提供了功能

您可以调查命名管道服务器,但这是相当多的工作,而且不能保证工作正常。。。或者试试http服务器;它需要http地址吗?命名管道当然可以工作,@“\\.\pipe\somename”。谬论是认为内存中的东西不在磁盘上。不是Windows的工作方式,而是在分页文件中。否则就不需要SecureString了。感谢您对命名管道的建议,这听起来很有希望。关于web服务器的建议,我应该在最初的帖子中提到,这种情况需要在另一个环境中发生,在这个环境中,无法与外部服务器通信。另一种使其看起来像文件系统的方法是使用WebDAV重定向器()并指向实现DAV协议的数据源(基本上是web服务器)。