只问耕耘
分类: C/C++
2006-05-29 14:28:32
思路:
1. 循环递归调用FindNextFile()遍历整个目录
void CDir::Put(){
//初始化
Init();
CStringArray m_Dir;
CString sdir;
char *lpBuffer=new char[200];
GetCurrentDirectory(200,lpBuffer);
sdir=lpBuffer;
BOOL bWorking =FindFile("*.*");
while (bWorking)
{
bWorking = FindNextFile();
if ( IsDots() ) continue;
if (IsDirectory())
{
//如果时目录,保存到数组里
m_Dir.Add( GetFileName());
//在服务器上创建相应的目录
m_pFtpConnection->CreateDirectory(GetFileName());
}
else
{
//如果时文件,把文件传到服务器上
m_pFtpConnection->PutFile(GetFileName(),GetFileName());
}
}
int i=0;
for(i=0;i
SetCurrentDirectory(m_Dir.GetAt(i));
m_pFtpConnection->SetCurrentDirectory(m_Dir.GetAt(i));
//关键,递归调用Put()
Put();
SetCurrentDirectory("..");
m_pFtpConnection->SetCurrentDirectory("..");
}
}
void CDir::Init()
{ CInternetSession *m_pInetSession;
CFtpConnection *m_pFtpConnection;
//上传c盘a目录
SetCurrentDirectory("c:\\a")
m_pInetSession=new CInternetSession();
try{
//获得ftp服务器连接
m_pFtpConnection=m_pInetSession->GetFtpConnection(m_Svr,m_Username,m_Pwd,atoi(m_Port));
}
catch (CInternetException * pEx)
{
TCHAR szError[1024];
if ( pEx->GetErrorMessage(szError,1024))
{ m_list->AddString( szError); }
}
if (m_pFtpConnection != NULL)
{
//把c盘a目录上传到服务器/opt/local目录
m_pFtpConnection->SetCurrentDirectory("/opt/local");
//在服务器上创建目录a
m_pFtpConnection->CreateDirectory(GetCurDir());
//切换服务器当前目录到新创建的目录a
m_pFtpConnection->SetCurrentDirectory(GetCurDir());
}
}
CString CDir::GetCurDir()//return "a" from full path "c:\a"
{
char *lpBuffer=new char[200];
GetCurrentDirectory(200,lpBuffer);
int n,i;
n=0;
CString s=lpBuffer;
while(*lpBuffer!=NULL)
{
if(*lpBuffer=='\\')
i=n;
lpBuffer++;
n++;
}
return s.Mid(i+1);
}