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

📄 ftplibrary.cs

📁 ftp客服端源代码
💻 CS
字号:
using System;
using NetLib = KCommon.Net.FTP;

namespace SourceFtp.FileSystem
{
	/// <summary>
	/// Summary description for FtpLibrary.
	/// </summary>
	public class FtpLibrary : ILibrary
	{
		private NetLib.Session m_Session;
		private NetLib.ControlChannel m_ControlChannel;
		private string m_ServerName;
		private string m_User;
		private string m_Password;
		private int m_Port;

		public FtpLibrary(string p_ServerName, string p_User, string p_Password, int p_Port)
		{
			m_Password = p_Password;
			m_ServerName = p_ServerName;
			m_Port = p_Port;
			m_User = p_User;
		}
	
		#region ILibrary Members

		public void Open()
		{
			m_Session = new NetLib.Session();
			m_Session.Server = m_ServerName;
			m_Session.Port = m_Port;
			m_Session.Connect(m_User,m_Password);
			m_ControlChannel = m_Session.ControlChannel;
		}

		public void Close()
		{
			m_Session.Close();
			m_ControlChannel = null;
			m_Session = null;
		}

		public Directory Root
		{
			get
			{
				return new Directory(this,m_Session.RootDirectory);
			}
		}

		public FileCollection GetFileList(Directory p_Dir)
		{
			NetLib.FtpDirectory l_Dir = (NetLib.FtpDirectory)p_Dir.InternalTag;
			m_Session.CurrentDirectory = l_Dir;
			NetLib.VbEnumableCollection l_Collection = l_Dir.Files;

			FileCollection l_Files = new FileCollection(this,p_Dir);

			foreach (NetLib.FtpFile f in l_Collection)
			{
				l_Files.ListAdd(new File(this,f));
			}
			return l_Files;
		}

		public DirectoryCollection GetSubDirectoryList(Directory p_Dir)
		{
			NetLib.FtpDirectory l_Dir = (NetLib.FtpDirectory)p_Dir.InternalTag;
			m_Session.CurrentDirectory = l_Dir;
			NetLib.VbEnumableCollection l_Collection = l_Dir.SubDirectories;

			DirectoryCollection l_SourceDirs = new DirectoryCollection(this,p_Dir);

			foreach (NetLib.FtpDirectory f in l_Collection)
			{
				l_SourceDirs.ListAdd(new Directory(this,f));
			}
			return l_SourceDirs;
		}

		public string GetFileFullPath(File p_Directory)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_Directory.InternalTag;
			return l_File.FullPath;
		}
	
		public string GetFileName(File p_Directory)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_Directory.InternalTag;
			return l_File.Name;
		}
		public string GetFileDateModified(File p_Directory)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_Directory.InternalTag;
			return l_File.DateModified;
		}

		public long GetFileSize(File p_Directory)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_Directory.InternalTag;
			return l_File.Size;
		}
	
		public string GetFilePermission(File p_Directory)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_Directory.InternalTag;
			return l_File.Permission;
		}

		public string GetDirectoryName(Directory p_Directory)
		{
			NetLib.FtpDirectory l_File = (NetLib.FtpDirectory)p_Directory.InternalTag;
			return l_File.Name;

		}
		public string GetDirectoryFullPath(Directory p_Directory)
		{
			NetLib.FtpDirectory l_File = (NetLib.FtpDirectory)p_Directory.InternalTag;
			return l_File.FullName;
		}

		public Directory AddSubDirectory(Directory p_Parent, string p_DirectoryName)
		{
			NetLib.FtpDirectory l_Directory = (NetLib.FtpDirectory)p_Parent.InternalTag;
			m_Session.CurrentDirectory = l_Directory;
			l_Directory.Refresh();
			return new Directory(this, l_Directory.AddSubdir(p_DirectoryName));
		}
	
		public void RemoveSubDirectory(Directory p_DirectoryToRemove)
		{
			NetLib.FtpDirectory l_Directory = (NetLib.FtpDirectory)p_DirectoryToRemove.InternalTag;
			NetLib.FtpDirectory l_ParentDir = l_Directory.Parent;
			m_Session.CurrentDirectory = l_ParentDir;
			l_ParentDir.Refresh();
			l_ParentDir.RemoveSubdir(l_Directory.Name);
		}
	
		public void RemoveFile(File p_File)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_File.InternalTag;
			NetLib.FtpDirectory l_ParentDir = l_File.Parent;
			m_Session.CurrentDirectory = l_ParentDir;
			l_ParentDir.Refresh();
			l_ParentDir.RemoveFile(l_File.Name);
		}
	
		public void RenameDirectory(Directory p_Directory, string p_NewName)
		{
			NetLib.FtpDirectory l_Directory = (NetLib.FtpDirectory)p_Directory.InternalTag;
			NetLib.FtpDirectory l_ParentDir = l_Directory.Parent;
			m_Session.CurrentDirectory = l_ParentDir;
			l_ParentDir.Refresh();
			l_ParentDir.RenameSubitem(l_Directory,p_NewName);
		}
	
		public void RenameFile(File p_File, string p_NewName)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_File.InternalTag;
			NetLib.FtpDirectory l_ParentDir = l_File.Parent;
			m_Session.CurrentDirectory = l_ParentDir;
			l_ParentDir.Refresh();
			l_ParentDir.RenameSubitem(l_File,p_NewName);
		}

		public void DownloadFile(File p_FileToDownload, string p_LocalDestinationPath)
		{
			NetLib.FtpFile l_File = (NetLib.FtpFile)p_FileToDownload.InternalTag;
			NetLib.FtpDirectory l_ParentDir = l_File.Parent;
			m_Session.CurrentDirectory = l_ParentDir;
			l_ParentDir.Refresh();
			l_ParentDir.GetFile(p_LocalDestinationPath, l_File.Name);
		}

		public void UploadFile(string p_LocalFileToUpload, Directory p_RemoteDestination)
		{
			NetLib.FtpDirectory l_Directory = (NetLib.FtpDirectory)p_RemoteDestination.InternalTag;
			m_Session.CurrentDirectory = l_Directory;
			l_Directory.Refresh();
			l_Directory.PutFile(p_LocalFileToUpload);
		}

		public Directory GetDirectory(string p_Path)
		{
			p_Path = p_Path.Trim();
			p_Path = p_Path.Replace("\\","/");
			p_Path = p_Path.Replace("//","/");

			if (p_Path == "/")
			{
				return Root;
			}
			else
			{
				NetLib.FtpDirectory l_Dir = m_Session.RootDirectory;
				string[] l_SubDirs = p_Path.Split('/');
				for (int i = 0; i < l_SubDirs.Length; i++)
				{
					if (l_SubDirs[i].Length>0)
					{
						m_Session.CurrentDirectory = l_Dir;
						l_Dir = l_Dir.FindSubdirectory(l_SubDirs[i]);
						if (l_Dir == null)
							throw new ApplicationException("Invalid remote path " + p_Path);
					}
				}
				return new Directory(this,l_Dir);
			}
		}

		#endregion

		public override string ToString()
		{
			if (m_Session!=null)
				return "Ftp:" + m_ControlChannel.Server;
			else
				return base.ToString();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -