📄 ftpfilebrowse.cpp
字号:
it.state=0;
if(finder.IsDirectory())
{
char windir[MAX_PATH];
GetWindowsDirectory(windir,MAX_PATH);
it.iImage=GetIconIndex(windir);
it.pszText = file;
it.cchTextMax = strlen(file)+1;
it.lParam = NULL;
m_list.InsertItem(&it);
i++;
}
}
finder.Close();
//now pick files
bWorking = finder.FindFile("*.*");
while (bWorking)
{
char file[MAX_PATH];
bWorking = finder.FindNextFile();
strcpy(file,finder.GetFileName());
LVITEM it;
it.mask = LVIF_TEXT|LVIF_IMAGE;
it.iItem = i;
it.iSubItem=0;
it.state=0;
if(!finder.IsDirectory())
{
it.iImage=GetIconIndex("*.txt");
it.pszText = file;
it.cchTextMax = strlen(file)+1;
it.lParam = NULL;
m_list.InsertItem(&it);
i++;
}
}
finder.Close();
/* else
{
it.iImage = GetIconIndex("*.txt");
}
*/
}
void FtpFileBrowse::OnFilesSelect()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
return;
CString item = m_list.GetItemText(i,0);
m_filename=item;
UpdateData(FALSE);
OnOpen();
}
void FtpFileBrowse::OnFilesOpenwith()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
if(!IsDir(item))
{
CString argument = "shell32.dll,OpenAs_RunDLL ";
char temppath[MAX_PATH];
CString localfile;
GetTempPath(MAX_PATH,temppath);
localfile = temppath;
localfile+="\\";
localfile+=item;
if(ftp_connection->GetFile(item,localfile,FALSE)==0)
{
MessageBox("Error in getting the file","Error");
return;
}
argument+=localfile;
ShellExecute (NULL, "open", "rundll32.exe", argument, NULL, SW_SHOW);
//DeleteFile(localfile);
}
}
void FtpFileBrowse::OnFilesDelete()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
CString CurDir;
ftp_connection->GetCurrentDirectory(CurDir);
if(IsDir(item))
{
if (ftp_connection->RemoveDirectory(item)==0)
{
DWORD err = GetLastError();
char errmsg[1024];
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_MAX_WIDTH_MASK|FORMAT_MESSAGE_FROM_STRING,0,err,0x0409,errmsg,1024,NULL)==0)
MessageBox("Failed to remove.","Error");
else
MessageBox(errmsg,"Error");
return ;
}
}
else
{
if (ftp_connection->Remove(item)==0)
{
DWORD err = GetLastError();
char errmsg[1024];
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_MAX_WIDTH_MASK|FORMAT_MESSAGE_FROM_STRING,0,err,0x0409,errmsg,1024,NULL)==0)
MessageBox("Failed to remove.","Error");
else
MessageBox(errmsg,"Error");
return ;
}
}
FillFiles(CurDir);
}
void FtpFileBrowse::OnFilesSendtonotepad()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
if(!IsDir(item))
{
CString argument;
char temppath[MAX_PATH];
CString localfile;
GetTempPath(MAX_PATH,temppath);
localfile = temppath;
localfile+="\\";
localfile+=item;
if(ftp_connection->GetFile(item,localfile,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII)==0)
{
MessageBox("Error in getting the file","Error");
return;
}
argument=localfile;
ShellExecute (NULL, "open", "notepad.exe", argument, NULL, SW_SHOW);
}
}
void FtpFileBrowse::OnDirSelect()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
if(IsDir(item))
FillFiles(item);
}
void FtpFileBrowse::OnDirDelete()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
CString CurDir;
ftp_connection->GetCurrentDirectory(CurDir);
if(IsDir(item))
{
if (ftp_connection->RemoveDirectory(item)==0)
{
DWORD err = GetLastError();
char errmsg[1024];
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_MAX_WIDTH_MASK|FORMAT_MESSAGE_FROM_STRING,0,err,0x0409,errmsg,1024,NULL)==0)
MessageBox("Failed to remove.","Error");
else
MessageBox(errmsg,"Error");
return ;
}
}
FillFiles(CurDir);
}
void FtpFileBrowse::OnFilesProperties()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
//find the file
CFtpFileFind finder(ftp_connection);
BOOL bWorking = finder.FindFile("*");
while (bWorking)
{
bWorking = finder.FindNextFile();
if(!finder.IsDirectory())
{
if(strcmp(item,finder.GetFileName())==0)
{
m_general.m_file.FileTitle=finder.GetFileName();
m_general.m_file.Root=finder.GetRoot();
m_general.m_file.Server= m_ftpprop.Server;
finder.GetCreationTime(m_general.m_file.created);
finder.GetLastAccessTime(m_general.m_file.accessed);
finder.GetLastWriteTime(m_general.m_file.modfied);
m_general.m_file.Archive =finder.IsArchived();
m_general.m_file.Compressed=finder.IsCompressed();
m_general.m_file.ReadOnly=finder.IsReadOnly();
m_general.m_file.Hidden=finder.IsHidden();
m_general.m_file.System=finder.IsSystem();
m_general.m_file.size=-1;
m_general.m_file.dir=FALSE;
break;
}
}
}
finder.Close();
CPropertySheet sheet;
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
sheet.m_psh.dwFlags&= ~PSH_HASHELP;
sheet.AddPage(&m_general);
char tmp[256];
sprintf(tmp,"%s Properties",m_general.m_file.FileTitle);
sheet.SetTitle(tmp);
sheet.DoModal();
}
void FtpFileBrowse::OnDirProperties()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString item = m_list.GetItemText(i,0);
//find the file
CFtpFileFind finder(ftp_connection);
BOOL bWorking = finder.FindFile("*");
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDirectory())
{
if(strcmp(item,finder.GetFileName())==0)
{
m_general.m_file.FileTitle=finder.GetFileName();
m_general.m_file.Root=finder.GetRoot();
m_general.m_file.Server= m_ftpprop.Server;
finder.GetCreationTime(m_general.m_file.created);
finder.GetLastAccessTime(m_general.m_file.accessed);
finder.GetLastWriteTime(m_general.m_file.modfied);
m_general.m_file.Archive =finder.IsArchived();
m_general.m_file.Compressed=finder.IsCompressed();
m_general.m_file.ReadOnly=finder.IsReadOnly();
m_general.m_file.Hidden=finder.IsHidden();
m_general.m_file.System=finder.IsSystem();
m_general.m_file.size=-1;
m_general.m_file.dir=TRUE;
break;
}
}
}
finder.Close();
CPropertySheet sheet;
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
sheet.m_psh.dwFlags&= ~PSH_HASHELP;
sheet.AddPage(&m_general);
char tmp[256];
sprintf(tmp,"%s Properties",m_general.m_file.FileTitle);
sheet.SetTitle(tmp);
sheet.DoModal();
}
CString FtpFileBrowse::GetFileName()
{
return file_filename;
}
CString FtpFileBrowse::GetFileURL()
{
return file_fileurl;
}
CString FtpFileBrowse::GetFilePath()
{
return file_filepath;
}
CString FtpFileBrowse::GetRoot()
{
return file_root;
}
void FtpFileBrowse::OnBeginlabeleditView(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
*pResult = 0;
}
void FtpFileBrowse::OnEndlabeleditView(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
return;
}
CString olditem = m_list.GetItemText(i,0);
LVFINDINFO finditem;
finditem.flags = LVFI_STRING;
finditem.psz = olditem.GetBuffer(0);
finditem.vkDirection = VK_DOWN;
int pos = m_list.FindItem(&finditem);
if(pos==-1)
{
MessageBox("Unspecified Error","Error",MB_ICONHAND);
return;
}
else
{
m_list.DeleteItem(pos);
ftp_connection->Remove(olditem);
}
if(!newdir)
{
CString item;
CEdit * newval = m_list.GetEditControl();
newval->GetWindowText(item);
CString CurDir;
ftp_connection->GetCurrentDirectory(CurDir);
CString mod_olditem,mod_newitem;
mod_olditem = CurDir+"/";
mod_olditem+=olditem;
mod_newitem = CurDir+"/";
mod_newitem+=item;
char newmitem[MAX_PATH],oldmitem[MAX_PATH];
strcpy(newmitem,mod_newitem.GetBuffer(0));
strcpy(oldmitem,mod_olditem.GetBuffer(0));
if(ftp_connection->Rename(oldmitem,newmitem))
{
m_list.SetItem(pos,0,LVIF_TEXT,item.GetBuffer(0),0,0,0,NULL);
}
}
else
{
newdir=FALSE;
CString item;
CEdit * newval = m_list.GetEditControl();
newval->GetWindowText(item);
if(ftp_connection->CreateDirectory(item))
{
m_list.SetItem(i,0,LVIF_TEXT,item.GetBuffer(0),0,0,0,NULL);
CString CurDir;
ftp_connection->GetCurrentDirectory(CurDir);
FillFiles(CurDir);
}
}
/*
CString mod_olditem,mod_newitem;
mod_olditem = CurDir+"/";
mod_olditem+=olditem;
mod_newitem = CurDir+"/";
mod_newitem+=item;
char newmitem[MAX_PATH],oldmitem[MAX_PATH];
strcpy(newmitem,mod_newitem.GetBuffer(0));
strcpy(oldmitem,mod_olditem.GetBuffer(0));
if(ftp_connection->Rename(oldmitem,newmitem))
{
m_list.SetItem(pos,0,LVIF_TEXT,item.GetBuffer(0),0,0,0,NULL);
}
*/
*pResult = 0;
}
void FtpFileBrowse::OnDel()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
MessageBox("Select a file to delete.","Delete",MB_ICONHAND);
return;
}
CString item = m_list.GetItemText(i,0);
if(IsDir(item))
OnDirDelete();
else
OnFilesDelete();
}
void FtpFileBrowse::OnProp()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
MessageBox("Select a file to show properties.","Properties",MB_ICONHAND);
return;
}
CString item = m_list.GetItemText(i,0);
if(IsDir(item))
OnDirProperties();
else
OnFilesProperties();
}
void FtpFileBrowse::SetServer(CString server, CString user, CString password,int port)
{
m_ftpprop.Server= server;
m_ftpprop.username=user;
m_ftpprop.password=password;
m_ftpprop.iPort=port;
}
BOOL FtpFileBrowse::PreTranslateMessage(MSG* pMsg)
{
toolnew.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
void FtpFileBrowse::OnEmtpyNewdirectory()
{
OnNew();
}
void FtpFileBrowse::OnEmtpyProperties()
{
CString CurDir;
if(ftp_connection->GetCurrentDirectory(CurDir)==0)
{
MessageBox("Unable to get the current directory","Error",MB_ICONSTOP);
return;
}
//find if the current dir is root
if(CurDir=="/") //root
{
MessageBox("Cannot show property for root","Properties",MB_ICONINFORMATION);
return;
}
CFtpFileFind finder(ftp_connection);
int pos = CurDir.ReverseFind('/');
if(pos==-1)
{
MessageBox("Canot go one level up","Error");
return;
}
CString updir;
updir = CurDir.Left(pos);
if(pos==0)
updir="/";
if(ftp_connection->SetCurrentDirectory(updir)==0)
{
MessageBox("Unable to set the current directory","Error",MB_ICONSTOP);
return;
}
BOOL bWorking = finder.FindFile("*");
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDirectory())
{
if(strcmp(CurDir,finder.GetFilePath())==0)
{
m_general.m_file.FileTitle=finder.GetFileName();
m_general.m_file.Root=finder.GetRoot();
m_general.m_file.Server= m_ftpprop.Server;
finder.GetCreationTime(m_general.m_file.created);
finder.GetLastAccessTime(m_general.m_file.accessed);
finder.GetLastWriteTime(m_general.m_file.modfied);
m_general.m_file.Archive =finder.IsArchived();
m_general.m_file.Compressed=finder.IsCompressed();
m_general.m_file.ReadOnly=finder.IsReadOnly();
m_general.m_file.Hidden=finder.IsHidden();
m_general.m_file.System=finder.IsSystem();
m_general.m_file.size=-1;
m_general.m_file.dir=TRUE;
break;
}
}
}
finder.Close();
if(ftp_connection->SetCurrentDirectory(CurDir)==0)
{
MessageBox("Unable to set the current directory","Error",MB_ICONSTOP);
return;
}
CPropertySheet sheet;
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
sheet.m_psh.dwFlags&= ~PSH_HASHELP;
sheet.AddPage(&m_general);
char tmp[256];
sprintf(tmp,"%s Properties",m_general.m_file.FileTitle);
sheet.SetTitle(tmp);
sheet.DoModal();
}
void FtpFileBrowse::OnSelchangeComboboxex3()
{
if(m_excom.GetCurSel()!=0)
{
COMBOBOXEXITEM myitem;
myitem.mask = CBEIF_SELECTEDIMAGE;
myitem.iItem=m_excom.GetCurSel();
myitem.iSelectedImage =OFOLDER;
myitem.iOverlay=1;
m_excom.SetItem(&myitem);
}
OnSelchangeDir();
}
void FtpFileBrowse::InsertString(int no,CString str)
{
COMBOBOXEXITEM myitem;
myitem.mask = CBEIF_TEXT |CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_OVERLAY;
myitem.iItem=no;
myitem.pszText = str.GetBuffer(0);
myitem.cchTextMax = str.GetLength();
myitem.iImage = CFOLDER;
myitem.iSelectedImage =OFOLDER;;
//find where the current dir exists
if(str.GetAt(0)=='/')
{
if(str.Find(m_curdir,0)!=-1)
myitem.iIndent=1;
else
myitem.iIndent=2;
}
else
{
CString CurDir;
ftp_connection->GetCurrentDirectory(CurDir);
CurDir+="/";
CurDir+=str;
if(str.Find(m_curdir,0)!=-1)
myitem.iIndent=1;
else
myitem.iIndent=2;
}
myitem.iOverlay=1;
m_excom.DeleteItem(no);
m_excom.InsertItem(&myitem);
// OnSelchangeDir();
}
void FtpFileBrowse::OnFilesRename()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
MessageBox("Select a file to show properties.","Properties",MB_ICONHAND);
return;
}
m_list.EditLabel(i);
}
void FtpFileBrowse::OnDirRename()
{
int i = m_list.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
if(i==LB_ERR)
{
MessageBox("Select a file to show properties.","Properties",MB_ICONHAND);
return;
}
m_list.EditLabel(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -