高分请问:打开文件时:“在访问 xxx.exe时发生共享违例”,详见帖子

高分请教:打开文件时:“在访问 xxx.exe时发生共享违例”,详见帖子
一个简单的下载程序,有如下代码
void Download(const char *pMsg, DWORD len)
{
srand(time(NULL));
static fileIndex = rand();
char fileName[256] = {0};
sprintf(fileName, "%u.exe", fileIndex);


static DWORD totalSize = 22222;
CFile file;
CFileException err;
if ( !file.Open(fileName, CFile::modeWrite|CFile::modeCreate|CFile::typeBinary|CFile::modeNoTruncate, &err) )
{
TCHAR errInfo[1024];
err.GetErrorMessage(errInfo, 1024);
AfxMessageBox(errInfo);
}
else
{
static DWORD fileOffset = 0;  //当前文件偏移
DWORD regSize = 1024;         //每次请求的大小

file.SeekToEnd();
file.Write(pMsg,len);  //写入接收到的数据
file.Close();

fileOffset += len;   //文件偏移

if ( fileOffset >= totalSize )
{
AfxMessageBox(_T("download finish"));
// SendDownRequest(fileOffset, regSize); ----------语句A
}
else
{
if ( (totalSize - fileOffset) <regSize )
{
regSize = totalSize - fileOffset;
}

SendDownRequest(fileOffset, regSize);  //请求后边的数据
}
}
}

从网络上获取到的文件数据,
通过函数Download写入,然后根据下载数据总量判断是否完成,没有完成,则继续请求后边的数据,直到完成

操作方式
1、同时开多个程序(由于Download通过随机数生成的文件名,所以不存在重复文件名,并且在所生成的目录确认过,文件名不重复);
2、下载的文件为exe可执行文件;
3、同时开的几个进程中,某个或某几个会出现打开文件失败:在访问 xxx.exe时发生共享违例
4、出现打开文件失败的进程在最开始几次肯定可以正常打开文件,只是中途可能会出现打开失败
5、如果在打开时候的时候继续向服务器请求(即把语句A的注释打开),在几次打开失败后,当重新受到网络来的数据,该进程又会成功打开改文件。

请不吝赐教,
1、出现这种情况的原因是如何引起的;
2、如何处理避免打开文件失败现象的发生;

定当高分感谢。





------解决方案--------------------
查看打开文件失败时返回的error code,看具体什么原因
------解决方案--------------------
err.GetErrorMessage 返回的是 “在访问 xxx.exe时发生共享违例”吗?

在err.GetErrorMessage()之前GetLastError()看得到多少?
------解决方案--------------------