在内存中创建一个文件(不在磁盘上生成临时文件) ,要求支持readfile,writefile函数(200分)

  • 主题发起人 主题发起人 jlugjb
  • 开始时间 开始时间
J

jlugjb

Unregistered / Unconfirmed
GUEST, unregistred user!
在内存中创建一个文件(不在磁盘上生成临时文件) ,要求支持readfile,writefile文件函数<br><br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;接手别人写的程序,使用了大量的api函数readfile,writefile操作<br>&gt;&gt;   现在要在原有的程序处理前对文件进行预处理<br>&gt;&gt; &nbsp; &nbsp; &nbsp;要求是<br>&gt;&gt;   1,不要在磁盘上生成临时文件,不破坏原始文件<br>&gt;&gt;   2,原有的代码不用改动,也就是做完预处理,把文件句柄传给原有的程序,可以正常执行<br>&gt;&gt;   3,提供代码,试验成功才给分 <br>&gt;&gt;   大体的过程应该是这样的,打开文件,得到句柄,进行一些操作处理把结果放到内存中的新文件中,关闭旧文件,把新文件的句柄传结原有程序,原程序正常运行,结束后关闭新文件。在这个过程中,新文件在内存中,磁盘上没有生成,旧文件没有被破坏。<br>&gt;&gt;
 
抢个沙发先,我不会,帮顶一下先:)
 
可以用文件映射<br>createfilemap<br>mapofview
 
你试过吗,我试了,函数读写失败啊
 
管道估计是可以的,可是一个服务一个客户,我这只是一个程序,不想做那么麻烦
 
使用虚拟盘就可以了!<br><br>如果有源代码,可以自定义Freadfile/Fwritefile替换readfile/writefile,直接使用sream即可!
 
stream<br>Tfiler<br>Twrite<br>Tread
 
moshisoft,就是不想改源代码才问的
 
zhaokaien,你真的明白,<br>stream<br>Tfiler<br>Twrite<br>Tread<br>是比readfile,writefile更高级的函数,可能吗
 
大家都答非所问
 
是不是要有个虚拟的文件,<br>能够像正常文件一样访问。<br>我也在寻找中~
 
RamDisk吗?
 
RamDisk是第三方工具吧,曾经用过<br>放在项目中不太好<br>要是程序自己创建一个就好了~
 
MrMengyi,是啊,最主要是跟正常文件一样
 
stream<br>Tfiler<br>Twrite<br>Tread 是vcl进行序列化的根基所在,他们是没有readfile,writefile这样的api函数更为底层,但是实现你说的在内存中建立文件没有任何问题
 
另外,用<br>createfilemap<br>mapofview出现读写失败是因为,你只是将文件影射到内存地址空间,但是并不是实际存在,就像照镜子,只是个影像,不是实体,所以才会出现读写失败的问题
 
Twrite和Treader是Tfiler这个虚拟基函数的两个派生,他有一个虚函数defineproperty,同时它在构造函数里引进stream,我个人认为,利用memorystream,和这个虚函数可以实现你所需要的功能,具体没有试验,你可以试试
 
都没有实际尝试的人,说也白说
 
后退
顶部