我为一个应用程序写了一个dll,它会通过ftp将一些信息从应用程序上传到服务器。上传适用于我上传的大部分文件。
有一个文件会完全上传,但在上传后会直接从服务器上删除(这种情况不会发生,有时上传后文件存在于服务器上)。该文件为400 kb,所有其他文件都较小。
日期和类型是两个CStrings。数据包含文件内容并键入文件名的第一部分。
CInternetSession session(_T("whtsnXt_dll"));
CFtpConnection* pServer = NULL;
CInternetFile* pFile = NULL;
LPCTSTR pszServerName = _T("servername");
CString fileName = type + L".txt";
int curPos = 0;
CString postData = data;
try
{
CString strServerName;
INTERNET_PORT nPort = 21;
pServer = session.GetFtpConnection(pszServerName, _T("username"), _T("password"), nPort, TRUE);
if (pServer->SetCurrentDirectory(L"goes") == 0) {
// MessageBox::Show("De map bestaat niet", "whtsnXt error", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
pFile = pServer->OpenFile((LPCTSTR)fileName, GENERIC_WRITE);
pFile->WriteString(postData);
pFile->Close();
pServer->Close();
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//catch errors from WinInet
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
MessageBox::Show(gcnew String(pszError), "whtsnXt error", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
session.Close();
是否有人知道直接删除上传该文件的方法?
答案 0 :(得分:2)
尝试以较小的部分上传文件:
int i;
for (i = 0; i < postData.Getlength(); i += 1024)
{
pFile->WriteString(postData.Mid(i, min(1024, postData.Getlength() - i));
}
只是为了确定:数据实际上是一个多字节或unicode字符串,并且不包含二进制数据? WriteString
只有在找到&#39; \ 0&#39;字符。要上传二进制数据,请使用pFile->Write
。