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
.
我为应用程序编写了一个 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
.