为什么我用Ftp命令InternetWriteFile发送到服务器的文件类型不正确,快风了。。。

sky9705 2006-04-07 01:31:06
各位兄弟,搞不懂啊。
我用vb ftp连接到ftp server
上传文件时到服务器端就变了格式了,打不开
hFile = FtpOpenFile(m_nHServer, szRemote, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0)
If hFile = 0 Then
ShowStatus "upload file failed!"
Else
ShowStatus "uploading File: " & szRemote
End If
Open szLocal For Binary As #1
nTotFileLen = LOF(1)

do
Get 1, , sBuffer

If (nTotFileLen - nSentByte) > sReadBuffer Then
If InternetWriteFile(hFile, sBuffer, sReadBuffer, nRet) = 0 Then
MsgBox "Upload File Error:" & szLocal
Exit Do
End If
Else
If InternetWriteFile(hFile, sBuffer, nTotFileLen - nSentByte, nRet) = 0 Then
MsgBox "Upload File Error:" & szLocal
Exit Do
End If
End If

nSentByte = nSentByte + sReadBuffer
If nSentByte >= nTotFileLen Then Exit Do

DoEvents
loop
...全文
319 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
51365133 2006-04-07
  • 打赏
  • 举报
回复
void CFtpaDlg::OnButton1()
{
// TODO: Add your control notification handler code here
strServerName="172.22.1.8";
strUser="gmsftp";
strPass="gmsftp";

if(GetPath("\\PSSend\\POSAP","d:\\a"))
AfxMessageBox("????íê3é");
else
AfxMessageBox("????꧰ü");
}

bool GetPath(CString remotePath, CString localPath)
{
TCHAR szRemote[MAX_PATH];
TCHAR szLocal[MAX_PATH];
WIN32_FIND_DATA fd;
BOOL bolBreak;

HINTERNET hInternet_z;
HINTERNET hFtpSession_z;
HINTERNET hFind_z;

hInternet_z = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
hFtpSession_z = InternetConnect(
hInternet_z,
strServerName ,
INTERNET_DEFAULT_FTP_PORT,
strUser ,
strPass ,
INTERNET_SERVICE_FTP,
0,
0);
while(1) {
hFind_z= FtpFindFirstFile(hFtpSession_z, remotePath, &fd, 0, 0);
bolBreak = FALSE;
lstrcpy(szRemote, "");
lstrcpy(szLocal, "");
if(hFind_z!= NULL)
do {
sprintf(szRemote, "%s\\%s",remotePath, fd.cFileName);
sprintf(szLocal, "%s\\%s",localPath, fd.cFileName);
//?ú?aà?±?μ?ê?μ?μ?μ????t
FtpGetFile(hFtpSession_z,szRemote,szLocal,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE,NULL);
//?′DD????2ù×÷
} while(InternetFindNextFile(hFind_z, &fd));
else
bolBreak=TRUE;
InternetCloseHandle(hFind_z);
InternetCloseHandle(hFtpSession_z);
InternetCloseHandle(hInternet_z);
if (bolBreak==TRUE)
return 1;
}
InternetCloseHandle(hFind_z);
InternetCloseHandle(hFtpSession_z);
InternetCloseHandle(hInternet_z);
return 0;
}

void CFtpaDlg::OnButton2()
{
// TODO: Add your control notification handler code here
strServerName="172.22.1.8";
strUser="gmsftp";
strPass="gmsftp";

if(PutFile("D:\\a\\a.txt","\\PSSend\\POSAP\\haha.txt"))
AfxMessageBox("é?′?íê3é");
else
AfxMessageBox("é?′?꧰ü");
}

bool PutFile(CString localFile, CString remoteFile)
{
TCHAR szRemote[MAX_PATH];
TCHAR szLocal[MAX_PATH];

HINTERNET hInternet_z;
HINTERNET hFtpSession_z;

hInternet_z = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
hFtpSession_z = InternetConnect(
hInternet_z,
strServerName ,
INTERNET_DEFAULT_FTP_PORT,
strUser ,
strPass ,
INTERNET_SERVICE_FTP,
0,
0);
//FtpGetFile(hFtpSession_z,szRemote,szLocal,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE,NULL);
sprintf(szRemote,"%s",remoteFile);
sprintf(szLocal, "%s",localFile);
if(FtpPutFile(hFtpSession_z,szLocal,szRemote,FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE,NULL)==TRUE)
{
InternetCloseHandle(hFtpSession_z);
InternetCloseHandle(hInternet_z);
return 1;
}
else
{
InternetCloseHandle(hFtpSession_z);
InternetCloseHandle(hInternet_z);
return 0;
}
}

这事我用VC写的,希望对你有所帮助。
homezj 2006-04-07
  • 打赏
  • 举报
回复
sBuffer是什么类型,是Byte数组吗?正常情况下应该写sBuffer(0)按址传递给API
sky9705 2006-04-07
  • 打赏
  • 举报
回复
没有人回,可惜啊。。。
以前那个猫工兄弟跑哪里去了?

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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