内存映射文件的使用,请进 :)(100分)

  • 主题发起人 主题发起人 cqbaobao
  • 开始时间 开始时间
C

cqbaobao

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序非常频繁地向磁盘上写数据,
这些数据固定地以同样的文件名,同样的大小写,
我想用内存映射文件代替真正的磁盘操作,能行吗?

另外,WINDOWS下有无DOS下内存虚拟盘的概念,与内存映射文件的区别是什么???

盼各路大侠伸出援助之手!!!
 
可以的。
具体的Delphi5开发人员指南上第12章就有详细的说明。
 
可以,你先看看http://www.delphibbs.com/delphibbs/dispq.asp?lid=624804
 
那书没有,我看过,

我要求:不用那个什么FDATA指针读写文件,而用文件名,
 
关键是写文件那部分我不能控制,它只提供了一个以文件名为参数的方法写该文件,
而读文件我可以控制,

怎么办?
 
分不够吗?可以再加,
各位帮帮忙,不要见死不救
 
从头说起吧:

我要对摄像头的图像实时以位图的格式处理,
速度要求很高(40毫秒左右),
而摄像头的图像目前只能用 capFileSaveDib 写到磁盘(位图格式),
并且该位图大小相同,文件名也可相同
注意是写到磁盘,
这就有两个问题:
;1。速度慢,2。长时间写到磁盘上同样的位置,我担心会损坏磁盘;
所以我想到用内存映射文件或虚拟磁盘驱动器的方式来接收该位图。

请赐教。
 
可以在内存建立虚拟盘的,我有两个文件就可以实现,在Win下只要运行应用程序,
可以建立指定大小的盘,用完后可以移去,这样盘就自动消失了,如果你需要的话
可以留Mail,我的是Qiyaismine@163.com
 
使用capVideoStreamCallback可以直接将FRAME在内存操作,然后你想和别人共享
就可以采用内存映象文件之类的方法了.
似乎我记得前几天有人详细地讨论过这个问题
 
可以的,我以前写过这样的程序:
先定义:
MapFileName:pchar='CurrentFrame';
SaveFileName:string='/file.dat',
TCreatFile:=CreateFile('c:',GENERIC_READ or GENERIC_WRITE,
; ; ; FILE_SHARE_READ or FILE_SHARE_WRITE,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
TMapFile:=CreateFileMapping( TCreatFile,nil,Page_ReadWrite,0,
; ; ; ; ; ; ; ; ;MapFileSize,MapFileName);
PMapFile:=MapViewOfFile(TMapFile,FILE_MAP_READ or FILE_MAP_WRITE,0,0,0);
程序结束时:
FlushFileBuffers(TMapFile);
 
TO:wenyue
; ; 如何“直接将FRAME在内存操作“,如果能这样那最好了,可别让我失望

TO:qiya
; ; TNND,21CN的油箱不能用了,请发 ;szchengyu@263.net, QQ: 59666073
 
发到邮箱了!
 
非常感谢,

但是不能运行,提示(Error Opening RAMDISK....)
怎么回事呢? ;请明示
 
你将那两个文件保存到同一目录下,然后运行就行了呀!
 
TO: wenyue
; ; 我用capSetCallbackOnFrame,其中PVIDEOHDR结构的lpData可否直接赋给
映射文件的文件指针
; ;
 
[h1]有意思!!![[blue][:(!][/blue]h1]
 
接受答案了.
 
后退
顶部