使用SOCKET实现FTP的简易客户端

2015-01-17 20:00:57|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 网络通信|来源:唯设编程网

12. 得到当前FTP目录

//得到当前FTP目录
int CFTP::ftp_pwd( char* buff )
{ 
	sprintf_s(m_cmd,"PWD
"); 
	int err = ftp_sendcmd(m_cmd,m_resp,sizeof(m_resp)); 
	if(err)
		return -1;
	//得到返回码
	int code = get_state_code(m_resp);
	//257 "/" is current directory.
	/*
	550-The system cannot find the file specified. 
	Win32 error:   The system cannot find the file specified. 
	Error details: File system returned an error.
	550 End
	*/
	if(code != 257)
		return -1;

	char* p=m_resp; 
	while(*p) 
	{ 
		if(*p == '"'){ 
			++p;
			while(*p != '"') 
				*buff++=*p++;
		}
		++p;
	} 
	*buff=0; 
	printf("current work directory is : %s
",buff); 
	return 0; 
}

得到当前FTP目录对应的命令是PWD。

13.  创建指定目录

//创建单个文件夹
int CFTP::ftp_mkdirSingle( const char* dir )
{ 
	sprintf_s(m_cmd,"MKD %s
",dir); 
	int err = ftp_sendcmd(m_cmd,m_resp,sizeof(m_resp)); 
	if(err)
		return -1;
	//得到返回码
	int code = get_state_code(m_resp);
	//257 "20150110" directory created.	 
	if(code != 257)
		return -1;	
	return 0; 
} 

创建目录使用MKD实现,但需要保证父级目录已经存在,如果想递归创建目录,可以使用下面的方法。

14. 递归创建FTP目录

//递归创建FTP目录
int CFTP::ftp_mkdir( const char* dir )
{ 
	char path[300]={0};
	int err = -1;
	//进入根目录
	err = ftp_cd("/"); 
	if(err)
		return -1; 
	size_t i,j; 
	//  printf("strlen(dir):%d",strlen(dir)); 
	for(i=1,j=0;i<strlen(dir);i++)   //第一个字节是根目录 
	{ 
		path[j++] = dir[i]; 
		if(dir[i]=='/'){ 
			path[j++]=''; 
			printf("create :%s
",path);
			//进入子目录
			err = ftp_cd(path); 
			if(err){
				err = ftp_mkdirSingle(path);
				if(err)
					return -1;
				err = ftp_cd(path);
				if(err)
					return -1;
			}			
			//重新开始
			j=0; 
		} 
	} 
	path[j++]='';

	//进入子目录
	err = ftp_cd(path); 
	if(err){
		err = ftp_mkdirSingle(path);
		if(err)
			return -1;
		err = ftp_cd(path);
		if(err)
			return -1;
	}
	
	return 0; 
}

 

发表评论0条 】
网友评论(共?条评论)..
使用SOCKET实现FTP的简易客户端