首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

★关于内存共享传递文件的有关问题!

2012-01-30 
★★★关于内存共享传递文件的问题!!★★★刚学VC,不很熟悉,照着网上的 共享内存实现进程间大数据的交换 写了

★★★关于内存共享传递文件的问题!!★★★
刚学VC,不很熟悉,照着网上的 "共享内存实现进程间大数据的交换 "写了个demo出来,可以在C/S之间传递字符串,但是我不知道要传递文件应该怎么写,我想把文件切成128K一个的小块然后存到共享内存区域来传递,请问应该怎么写?关键是想知道:服务端怎么把文件一边读成128k一个小块的流存放到我的内存共享区域、客户端一边读取并逐渐还原成文件保存到磁盘上!!请各位老大最好给个具体实现的代码,当然有完整的例子更好!!实在不行,给几个操作相关的函数也可以啊!!(主要是不知道文件切割还原那部分应该怎么实现!)

[解决办法]
以前学操作系统的时候,也做过共享内存来实现多进程间的数据传递。但是你说的传递的大文件是不是指用户机器之间的传递?类似于QQ,MSN之间的传送文件功能?如果是这样的话就属于网络编程,要基于TCP连接或者UDP连接的。
[解决办法]
用管道文件
一个写,一个读
[解决办法]
我也不大清楚,好像Socket可以
[解决办法]
//********************
// server.cpp

HANDLE hFile=CreateFile(TEXT( "srcfile "), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE==hFile) return FALSE;

#define BUFFER_SIZE (1 < <17)
LPBYTE pBuffer=(LPBYTE)HeapAlloc(GetProcessHeap(), 0, BUFFER_SIZE );
DWORD dwRead;
DWORD dwWritten;

while(ReadFile(hFile, pBuffer, BUFFER_SIZE, &dwRead, NULL))
{
if(0==dwRead) break;
// sendto client, eg.
WriteFile(hPipe, pBuffer, dwRead, &dwWritten, NULL);
}
CloseHandle(hFile);
HeapFree(GetProcessHeap(), 0, pBuffer);


//********************
//client.cpp

HANDLE hFile=CreateFile(TEXT( "destfile "), GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE==hFile) return FALSE;

#define BUFFER_SIZE (1 < <17)
LPBYTE pBuffer=(LPBYTE)HeapAlloc(GetProcessHeap(), 0, BUFFER_SIZE );
DWORD dwRead;
DWORD dwWritten;
while(ReadFile(hPipe, pBuffer, BUFFER_SIZE, &dwRead, NULL))
{
if(dwRead==0) break;
// Save to disk
WriteFile(hFile, pBuffer, dwRead, &dwWrite, NULL);
}
CloseHandle(hFile);
HeapFree(GetProcessHeap(), 0, pBuffer);

热点排行