现在我要从网上下载文件并处理,具体做法如下:
1 利用socket从网上接收一个文件,放在内存中。
2 把内存中的文件存成磁盘上的文件。
3 利用fopen打开这个磁盘上的文件,得到FILE *指针,然后将此FILE *指针作为输入参数送给一个函数库,让该函数库对文件中的数据进行处理。我必须要使用这个函数库的功能,而且无法对库函数进行改动。而库函数使用了FILE *指针作为输入参数,所以必须以foepn方式打开下载到的文件。如果用前面那1、2、3的步骤也可以,但是因为文件要先存到磁盘再用fopen打开读到内存,所以效率比较低下,浪费了大量的运行时间。现在的问题是,是否可以采用一些技巧,直接用fopen把内存中的文件打开来,从而避免掉写和读磁盘的操作。谢谢

解决方案 »

  1.   

    _open_osfhandle
    主要功能是把系统的文件句柄转化为c运行库的文件指针void OSFileToCRTFile()
    {
    HANDLE hFile = CreateFile("c:\\test.dat", GENERIC_READ | GENERIC_WRITE, 0, NULL, 
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);char szText[] = "Hello world!\n";
    DWORD dwWritten;
    WriteFile(hFile, szText, strlen(szText), &dwWritten, NULL);FILE* pFile = NULL;
    int nHandle = _open_osfhandle((long)hFile, _O_TEXT | _O_APPEND);
    if (nHandle != -1)
    pFile = _fdopen(nHandle, "wt");if(pFile)
    {
    int n = fputs("write by FILE*!", pFile);
    fflush(pFile);//立即写入文件
    // n == 0
    }CloseHandle(hFile);
    }
      

  2.   

    CMemFile( BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0 );