转自:http://www.zxbc.cn/html/20090609/71620.html
共享文件方式
(1)数据发送
数据发送进程为通过Cfile类创建一个共享文件,然后调用write()方法想文件中写入数据,具体代码如下:
#include <Afx.h>
#include <stdio.h>
#include <string.h>
void main()
{
CString filename = _T("C:\\test.txt");
CFile file;
if (file.Open(filename, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyRead))
{
char buf[128]={0};
strcpy(buf, "I love China very much");
file.Write(buf, strlen(buf));
file.Close();
}
else
{
printf(_T("创建文件失败!"));
}
}
打开文件后,用write()来写入文件
(2)数据接收数据在接收进程中,通过Cfile类打开以上创建的共享文件,然后调用read()方法读取数据,具体代码如下:
#include <afx.h>
#include <string.h>
#include <stdio.h>
void main()
{
CFile file;
CString filename = _T("C:\\test.txt");
if(file.Open(filename, CFile::modeRead|CFile::shareDenyWrite)==TRUE)
{
char Buf[100]={0};
file.Read(Buf, 100);
printf("从%s中读取100byte,内容为:%s\n", filename, Buf);
//file.Close();
}
else
{
printf(_T("打开文件失败!"));
}
}
注意:
在上述实现中,数据发送方在open()时,传入参数:CFile::shareDenyRead,即不允许其他进程读取该文件
接收方在open()时,传入参数:CFile::shareDenyWrite,即不允许其他进程写入该文件
因此,在进行完读、写操作之后,必须立刻关闭close()文件
尽管这样,仍然存在双方撞车的可能;而且每次都需要打开、关闭文件,从而导致系统开销;