CInternetSession::WriteString写入文件直接删除

CInternetSession::WriteString writes the file and removes directly

我为应用程序编写了一个 dll,它将通过 ftp 从应用程序上传一些信息到服务器。我上传的大部分文件都可以正常上传。

有一个文件会上传完整但上传后直接从服务器上删除(这种情况并不总是发生,有时上传后文件存在于服务器上)。该文件大约 400 kb,其他所有文件都较小。

date 和 type 是两个 CString。数据包含文件内容和类型文件名的第一部分。

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();

有人知道上传该文件而不直接删除的方法吗?

尝试上传较小的文件:

int i;
for (i = 0; i < postData.Getlength(); i += 1024)
{
    pFile->WriteString(postData.Mid(i, min(1024, postData.Getlength() - i));
}

确定一下:数据实际上是一个多字节或 unicode 字符串,不包含二进制数据? WriteString 只会写入直到找到 '\0' 字符。要上传二进制数据,请使用 pFile->Write.