在网上找到的都是作为文件写入硬盘,有没有不写入硬盘的方法呢?

解决方案 »

  1.   

    之前文件是从硬盘上读的,使用fopen得到一个FILE*指针,现在文件直接打包到EXE里了,怎么能再得到一个FILE*指针呢?fopen无法直接读取资源,也没有找到这样的函数。
      

  2.   

    // 检查并存储Scintilla的dll,如果不存在就释放一个
    void
    CheckScintillaDll( void )
    {
    TCHAR all[ 0x200 ];
    size_t i;
    unsigned char *buf;
    DWORD size; buf = NULL; _tcscpy( all, __wargv[ 0 ] ); i = _tcslen( all );
    while( '\\' != all[ i - 1 ] )
    {
    all[ i - 1 ] = 0;
    i--;
    } _tcscat( all + i, _T( "SciLexer.dll" ) ); if( !PathFileExists( all ) )
    {
    // 文件不存在
    HRSRC res;
    HGLOBAL data;
    void *pdata; HINSTANCE inst = AfxGetInstanceHandle();
    res = ::FindResource( inst, MAKEINTRESOURCE( IDR_SCINTILLA_DLL ), _T( "SCINTILLA_DLL" ) );
    if( !res )
    {
    return;
    } data = ::LoadResource( NULL, res );
    if( !data )
    {
    return;
    } size = ::SizeofResource( NULL, res ); pdata = ::LockResource( data );
    if( !pdata )
    {
    return;
    } buf = new unsigned char[ size + 0x100 ];
    memset( buf + size - 0x10, 0, 0x100 );
    memcpy( ( unsigned char * )buf, pdata, size ); FILE *fp; fp = _tfopen( all, _T( "wb" ) ); if( fp )
    {
    fwrite( buf, 1, size, fp );
    fflush( fp );
    }
    fclose( fp );
    UnlockResource( data );
    FreeResource( res );
    return;
    }
    }
      

  3.   

    FindResource得到的指针不是FILE*啊,试了一下也不成功。
      

  4.   

    http://blog.csdn.net/visualeleven/article/details/6035381
      

  5.   

    buf = new unsigned char[ size + 0x100 ];
    memset( buf + size - 0x10, 0, 0x100 );为什么要+0x100?
      

  6.   

    干嘛非得用 FILE *,已经可以获取数据在内存中了的
      

  7.   

    可能理解上有误,我想应该有两种状况:
    1)数据文件是作为资源保存在exe文件中,楼上各位已经回答的非常好了;这种情况下我一般是将文件以自定义的二进制资源放在exe文件中;
    2)数据文件是直接拷贝或追加到exe文件的;这种做法是在打包的时候,除数据被追加到exe文件末尾,还会在数据之后追加诸如32位的数据长度;因此,这样情况下,数据文件获得方式如下:
    a)由GetModuleFileName获得当前执行文件的文件名;
    b)由CreateFile、ReadFile、SetFilePointer读取数据的长度;
    c)由ReadFile读取所需要的数据(SetFilePointer移动文件指针....)
    d)CloseFile
    不是很明白LZ说的打包的含义,如果数据真的的是包含在资源文件中,楼上的回答就已经OK了
      

  8.   

    没有办法,可用的函数接口只认FILE*