2012-04-26 111 views
-1

如何创建一个文件,我可以处理对这个文件的所有访问。我的程序可以将请求的数据发送到从此文件读取的所有程序,并接收对此文件的所有写入。如何创建虚拟可变文件?

+0

什么是虚拟文件? – 2012-04-26 09:31:25

+0

“虚拟文件”是一个在磁盘或内存中不存在的文件。并通过软件进行模拟。 – MohsenB 2012-04-26 09:58:27

+7

如果它不存在于磁盘上并且不存在于RAM中,它在哪里? – 2012-04-26 10:09:45

回答

0

NTFS流:

NTFS Stream可能是另一种选择。从Windows Sysinternals


行情:

NTFS文件系统提供的应用程序来创建的信息 备用数据流的能力。默认情况下,所有数据都存储在 文件的主要未命名的数据流,但通过使用语法 “文件:流”,你能读写交替 ...


上流

其它相关的资源:

+0

这是在磁盘上,并将在下一代Win8文件系统中消失。 – 2012-04-26 21:36:38

3

这听起来好像需要创建使用的CreateFileMapping/MapViewOfFile一个共享内存区 - 你会发现在网络上,并在书的例子很多。

+1

例如:http://voiceofgeek.blogspot.com/2009/02/memory-mapped-file-in-delphi.html – Pateman 2012-04-26 09:34:10

2

这个问题很模糊。

如果其他应用程序是你的,那么你可以选择一些其他的进程间通信(IPC)机制,而不是使用的文件。或者您可以使用临时文件(使用特殊的TEMPORARY属性创建的文件)。

如果其他应用程序是不是你,并期望该文件在磁盘上存在,那么你需要或者创建这个文件,或创建一个虚拟文件系统和磁盘或现有的文件系统上的虚拟文件。要创建虚拟文件系统,您需要一个内核模式驱动程序(文件系统驱动程序)。要在现有磁盘上创建虚拟文件,您需要内核模式文件系统过滤器驱动程序。

内核模式驱动程序是非常棘手和耗时的创建,并且需要Windows内部知识。作为选项之一,您可以使用我们的回叫文件系统(CBFS)产品,该产品可让您以用户模式(我们提供驱动程序)创建虚拟文件系统。但是CBFS对于你的任务可能是一种矫枉过正。

因此,您最好的选择是审查您的任务和要求,并找到另一种方式向其他应用程序提供数据。

+0

例如:我需要创建一个虚拟文件,用于更改其他程序的每次访问的数据。而不是在RAM或磁盘上存在这个文件,因为文件访问数据的每个字节都被改变了,这个改变是通过我的程序进行的。 – MohsenB 2012-04-26 10:33:05

+0

@MohsenB这种方法存在问题 - 操作系统会在读取文件数据后缓存文件数据,并且每次读取都无法替换新数据。此外,所有程序的数据必须相同(出于同样的原因 - 缓存)。这些是Windows文件系统体系结构的限制/细节,与Unix类似的系统不同,它将文件视为命名数据,而不是某些数据流。 – 2012-04-26 10:37:47

+0

谢谢,我的最终目标是创建一个虚拟文件,该文件模拟其他加密文件,并且由于此加密文件非常大,我希望在运行时间减少并且只阻止其他程序访问它。 – MohsenB 2012-04-26 10:49:41

0
+0

你能写一个样本吗? – MohsenB 2012-04-28 18:01:30

+0

下面是一个示例:xxmCGI.exe将CGI调用从Web服务路由到托管命名管道的中央xxmHost.exe进程:http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/cgi/ xxmCGI.dpr?view =标记http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/cgi/xxmHostRun.pas?view=markup – 2012-04-28 18:44:04