InternetWriteFile 写入失败

sybtjp 2010-07-16 11:27:38
OutputDebugString(_T("postcrash"));

if (m_bCancelled)
return;

//这里必须是非unicode
CString StartBoundary;
CString EndBoundary;

CPath FileNameOnly(m_FileName);
FileNameOnly.StripPath();
StartBoundary.Format(
"--%s\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupfile\r\n"
"--%s\r\nContent-Disposition: form-data; name=\"upfile\"; filename=\"%s\"\r\nContent-Type: application/x-zip-compressed\r\n\r\n",
MULTI_PART_BOUNDARY, MULTI_PART_BOUNDARY, LPCSTR(FileNameOnly)
);
EndBoundary.Format("\r\n--%s--\r\n", MULTI_PART_BOUNDARY);

DWORD dwFileSize = GetFileSize(m_hFile, NULL);
DWORD dwTotalDataSize = dwFileSize + StartBoundary.GetLength() + EndBoundary.GetLength();
SendRequestExWithCA(dwTotalDataSize);

CString sBuffer;
LPBYTE lpBuffer = (LPBYTE)sBuffer.GetBuffer(MAX_BUF_SIZE / sizeof(TCHAR));
DWORD nWriteBufferSize = DEF_BUF_SIZE;

for (DWORD nPos = 0; nPos < (DWORD)StartBoundary.GetLength();)
{
DWORD nWritten = 0;
BOOL bWritten = ::InternetWriteFile(m_hRequest, LPCTSTR(StartBoundary), (DWORD)StartBoundary.GetLength() - nPos, &nWritten);
CheckError(TRUE == bWritten, _T("InternetWriteFile failed. Error: %d."), GetLastError());
nPos += nWritten;
}

for (DWORD nPos = 0; nPos < dwFileSize;)
{
DWORD nRead;
BOOL bRead = ::ReadFile(m_hFile, lpBuffer, MAX_BUF_SIZE, &nRead, NULL);
CheckError(TRUE == bRead, _T("ReadFile failed. Error: %d."), GetLastError());
nPos += nRead;
for (DWORD nPosInBuffer = 0; nPosInBuffer < nRead; )
{
if (m_bCancelled)
return;
DWORD nStartTick = GetTickCount();
DWORD nWritten;
DWORD nNeedWrite = min(nWriteBufferSize, nRead - nPosInBuffer);
BOOL bWritten = ::InternetWriteFile(m_hRequest, lpBuffer + nPosInBuffer, nNeedWrite, &nWritten);
CheckError(TRUE == bWritten, _T("InternetWriteFile failed. Error: %d."), GetLastError());
DWORD nEndTick = GetTickCount();
nPosInBuffer += nWritten;
nWriteBufferSize = CalcSentBufferSize(nEndTick - nStartTick, nWritten, nWriteBufferSize);
}

}

for (DWORD nPos = 0; nPos < (DWORD)EndBoundary.GetLength();)
{
DWORD nWritten = 0;
BOOL bWritten = ::InternetWriteFile(m_hRequest, LPCTSTR(EndBoundary), (DWORD)EndBoundary.GetLength() - nPos, &nWritten);
CheckError(TRUE == bWritten, _T("InternetWriteFile failed. Error: %d."), GetLastError());
nPos += nWritten;
}

BOOL bEndReq = ::HttpEndRequest(m_hRequest, NULL, 0, (DWORD)this);
CheckError(TRUE == bEndReq, _T("HttpEndRequest failed. Error: %d."), GetLastError());
}



以上是主要代码,在BOOL bWritten = ::InternetWriteFile(m_hRequest, lpBuffer + nPosInBuffer, nNeedWrite, &nWritten);这段代码第二次返回的时候就出错了。不知道是不是代码问题。
...全文
285 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧