windows FtpPutFile上传文件有问题

yixuan178 2009-07-27 06:21:39
string remoteName = "192.168.1.11";
string filename = "c:\\Log.txt";
string userName = "test";
string userPass = "123456";
//string path = "/xx/";
string targetFileName = "/xx/aa";
HINTERNET hSession = InternetOpenA("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hSession != NULL){
HINTERNET hConnection;
hConnection = InternetConnectA(hSession, remoteName.c_str(), INTERNET_DEFAULT_FTP_PORT, userName.c_str(), userPass.c_str(),INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if(hConnection != NULL){
//unsigned long lpdwCurrentDirectory = MAX_PATH;
//unsigned long lpdwCurrentDirectory2 = MAX_PATH;
//LPSTR lpszCurrentDirectory;
//char lpszCurrentDirectory[MAX_PATH];
//char lpszCurrentDirectory2[MAX_PATH];
//BOOL success = FtpGetCurrentDirectoryA(hConnection,lpszCurrentDirectory,&lpdwCurrentDirectory);
//std::cout<<"lpszCurrentDirectory"<<lpszCurrentDirectory<<std::endl;
//stringstream ss;
//ss<<lpszCurrentDirectory<<path;
//path = ss.str();
//string path = string(lpszCurrentDirectory)+path;
//std::cout<<"succ:"<<success<<"path is:"<<path<<std::endl;
//std::cout<<"dic:"<<lpszCurrentDirectory<<std::endl;
//success = FtpSetCurrentDirectoryA(hConnection, path.c_str());
//std::cout<<"succ:"<<success<<std::endl;
success = FtpPutFileA(hConnection, filename.c_str(), targetFileName.c_str(), FTP_TRANSFER_TYPE_ASCII, 0);
int rc = GetLastError();
std::cout<<"rc is:"<<rc<<std::endl;
if(rc == ERROR_INTERNET_EXTENDED_ERROR){
char szError[1024];
DWORD dwErrorSize = 1024;
DWORD dwLastErrorMsg;
InternetGetLastResponseInfoA(&dwLastErrorMsg,szError,&dwErrorSize);
std::cout<<"szError:"<<szError<<std::endl;
}


我这段程序,如果上传文件到windows搭建的ftp服务器没有问题,但是上传到linux(vsftp)有问题,提示的错误是550:Cannot create file。
不过,我用windows的ftp命令可以上传文件,这点应该不是权限的问题。
这个我试过,可以用先得到当前目录,然后再设置当前目录,然后上传文件,且这个targetFileName不包含路径信息,也是可以上传的。
我这里就有点纳闷,为何会这样呢,是putfile api的局限么?
请达人们不吝赐教!
...全文
356 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yixuan178 2009-08-02
  • 打赏
  • 举报
回复
这句话不懂的,呵呵,他可以是相对的或者当前的路径,也就是说可以接受路径方式的参数啊。
可是我现在的程序,跑下来的结果似乎不是这样的。也觉得很奇怪。
不知道windows本地的那个ftp是怎么实现的。

[Quote=引用 4 楼 lijinfenghust 的回复:]
Both lpszNewRemoteFile and lpszLocalFile can be either partially or fully qualified file names relative to the current directory.

这句话我也不知道咋翻译,也许有点作用。
[/Quote]
lijinfenghust 2009-07-29
  • 打赏
  • 举报
回复
Both lpszNewRemoteFile and lpszLocalFile can be either partially or fully qualified file names relative to the current directory.

这句话我也不知道咋翻译,也许有点作用。
yixuan178 2009-07-29
  • 打赏
  • 举报
回复
没人知道了吗?
yixuan178 2009-07-28
  • 打赏
  • 举报
回复
我上面提到过,我可以使用ftp命令(windows自带)上传文件,所以我排除了权限了问题,而且我也用filezilla在windows下测试过,都是可以的。
不应该是权限的问题。
谢谢。
大前置 2009-07-27
  • 打赏
  • 举报
回复
权限

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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