发信人: laical()
整理人: wenbobo(2002-12-06 23:03:02), 站内信件
|
我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL E *)指针一样的方法来调用.
我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进 行读写,以提高速度,但又要象使用(FILE *)一样,能实现吗?
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.106.100] 发信人: tsingxiao (脑袋), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 14:21:06 1999), 站内信件
【 在 laical (阿凡) 的大作中提到: 】
: 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: E *)指针一样的方法来调用.
: 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: 行读写,以提高速度,但又要象使用(FILE *)一样,能实现吗?
: .......
你想用来做什么?cache?
-- 我
既不能达而兼善天下
只好穷而独善自身
青山处处 斯民如土矣……
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.253.50] 发信人: laical (阿凡), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 14:47:27 1999), 站内信件
【 在 tsingxiao (脑袋) 的大作中提到: 】
: 【 在 laical (阿凡) 的大作中提到: 】
: : 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: : E *)指针一样的方法来调用.
: : 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: .......
最近我找了一个JPEG的LIB,我想用它来压缩我的图象,但又不想它把图象写入 硬盘中.
可是它一定要我给它(FILE *)的指针,还好它没有帮我把文件也关了,关闭文 件是留给我自己做的,但我始终还是要关文件的吧.有没有办法可以不保存它呢?
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.106.100] 发信人: wenbobo (Sirius), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 17:18:59 1999), 站内信件
【 在 laical (阿凡) 的大作中提到: 】
: 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: E *)指针一样的方法来调用.
: 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: 行读写,以提高速度,但又要象使用(FILE *)一样,能实现吗?
: .......
你可以使用内存印象文件,看我的程序,这本来是为进程之间共享内存写的,
不过也能满足你得要求,当然,文件句柄 HANDLE(0xFFFFFFFF) 是内存印象
文件专有的,必需用名字区分,用法举例:
在App A里面
TShareMem* a = new TShareMem ( FShareMemName, FShareMemSize );
创建共享内存,如果已经存在,则是取得该共享内存
在App B里面,进行同样操作……
这似乎不同于你的要求,CreateFileMapping的时候变通一下就可以了.
//本程序如果被采用,请在软件界可视面中添加以下字符串.
//除此以外, NO RIGHTS RESERVED.
//Copyrights bobo, GVC G-COM R&D Lab. Email: [email protected]
//-------------------------------------------------------------------- -------
#ifndef wb_TShareMem_H
#define wb_TShareMem_H
//-------------------------------------------------------------------- -------
// TShareMem is a class for shareing memory between different processe s.
#include "wb_error.h"
class TShareMem: public TObject
{
public:
AnsiString FileName;
DWORD FileSize;
DWORD Handle;
DWORD Address;
public:
__fastcall TShareMem(AnsiString iFileName,DWORD iFileSize);
__fastcall TShareMem(AnsiString iFileName,DWORD iFileSize,DWOR D AccessMode );
virtual __fastcall ~TShareMem();
};
//-------------------------------------------------------------------- -------
__fastcall TShareMem::TShareMem(AnsiString iFileName,DWORD iFileSize,D WORD AccessMode )
{
FileName = iFileName.c_str();
FileSize = iFileSize;
Handle = (DWORD)CreateFileMapping ( HANDLE(0xFFFFFFFF),
NULL, PAGE_READWRITE, 0, iFileSize, iFileName.c_str() );
if (Handle)
{
Address = (DWORD)MapViewOfFile( (HANDLE)Handle, AccessMode, 0, 0, iFileSize);
if (!Address)
Exit( AnsiString(this->ClassName()) + ": CreateFileMapping" );
}
}
//-------------------------------------------------------------------- -------
__fastcall TShareMem::TShareMem(AnsiString iFileName,DWORD iFileSize)
{
FileName = iFileName.c_str();
FileSize = iFileSize;
Handle = (DWORD)CreateFileMapping ( HANDLE(0xFFFFFFFF),
NULL, PAGE_READWRITE, 0, iFileSize, iFileName.c_str() );
if (Handle)
{
Address = (DWORD)MapViewOfFile( (HANDLE)Handle, FILE_MAP_ALL_ACCES S, 0, 0, iFileSize);
if (!Address)
Exit( AnsiString(this->ClassName()) + ": CreateFileMapping" );
}
}
//-------------------------------------------------------------------- -------
__fastcall TShareMem::~TShareMem()
{
if (Address != 0 )
{
if ( !UnmapViewOfFile((void*)Address) )
Exit( "UnmapViewOfFile" );
}
}
#endif
-- 高高山上一株槐
香飘十里伴云彩
凭君翘足树下望
所思伊人来未来
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.160.187] 发信人: laical (阿凡), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 19:31:14 1999), 站内信件
【 在 wenbobo (Sirius) 的大作中提到: 】
: 【 在 laical (阿凡) 的大作中提到: 】
: : 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: : E *)指针一样的方法来调用.
: : 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: .......
CSharedFile是从CMemFile继承过来的,好象不能象(FILE *)哪样用吧.
例如:numread = fread( void *buffer, size_t 1, size_t count, FILE *Myfi le );
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.106.100] 发信人: tsingxiao (脑袋), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 21:28:23 1999), 站内信件
【 在 laical (阿凡) 的大作中提到: 】
: 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: E *)指针一样的方法来调用.
: 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: 行读写,以提高速度,但又要象使用(FILE *)一样,能实现吗?
: .......
你可以使用内存映象文件。
-- 我
既不能达而兼善天下
只好穷而独善自身
青山处处 斯民如土矣……
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.253.50] 发信人: ldron (老菜鸟), 信区: C 标 题: Re: 如何在内存中建立临时文件?(VC) 发信站: 网易虚拟社区 (Sun Aug 15 21:34:01 1999), 站内信件
【 在 laical (阿凡) 的大作中提到: 】
: 我想在内存中建立一临时文件,但它要有(FILE *)的特性,即可以象使用(FIL
: E *)指针一样的方法来调用.
: 我试过用CMemFile,但它不能象(FILE *)哪样操作,我的目的是不想对硬盘进
: 行读写,以提高速度,但又要象使用(FILE *)一样,能实现吗?
: .......
首先,我很菜,如果不对请勿见怪.
可以用GlobalAlloc,定义一个和文件长度一样大小的空间,GlobalAlloc返回的是 一个void *,然后你就可以操作了,用完了后GlobalUnlock(Gtemp);GlobalFree(G temp);释放了就可以了
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.85.194]
|
|