InternetWriteFile 写入失败
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);这段代码第二次返回的时候就出错了。不知道是不是代码问题。