⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpfilebrowse.cpp

📁 ftp 服务器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -