发信人: 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]
  | 
 
 
 |