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

📄 ftpfile.cs

📁 ftp客服端源代码
💻 CS
字号:
using System;
using System.IO;
using System.Net.Sockets;
using System.Runtime.InteropServices;

namespace KCommon.Net.FTP
{
	#region COM interface IFtpFile
	public interface IFtpFile : IFtpItem
	{
		long	Size		{get;}
	}
	#endregion

	[ClassInterface(ClassInterfaceType.None)]
	public class FtpFile : IFtpFile
	{
		FtpDirectory		m_parent;
		string				m_name;
		string				m_permission;
		long				m_size;
		string				m_DateModified;
		
		internal FtpFile(FtpDirectory parent, ref ItemInfo info)
		{
			m_parent	= parent;
			m_name		= info.name;
			m_size		= info.size;
			m_permission= info.permission;
			m_DateModified = info.datemodified;
		}
		internal FtpFile(FtpDirectory parent, string name)
		{
			m_parent	= parent;
			m_name		= name;
		}
		public bool IsFile
		{
			get {return true;}
		}
		public bool IsDirectory
		{
			get {return false;}
		}
		public string Name
		{
			get {return m_name;}
			set 
			{
				// Assume Parent is Current Directory. 
				// Will cause SERIOUS PROBLEM if Parent is not current directory.
				m_parent.RenameSubitem(this, value);
				m_name = value;
			}
		}
		public string FullName
		{
			get {return m_parent.FullName + m_name;}
		}
		public long Size
		{
			get {return m_size;}
		}
		public string Permission
		{
			get {return m_permission;}
		}
		public string DateModified
		{
			get{return m_DateModified;}
		}
		public FtpDirectory Parent
		{
			get
			{
				//TODO DAVIDE controllare, ho tolto questo controllo non dovrebbe servire e in alcuni casi non faceva funzionare il programma
				//m_parent.CheckSessionCurrentDirectory();
				return m_parent;
			}
		}
		public string FullPath
		{
			get {return m_parent.FullName + m_name;}
		}
		public void Rename(string newName)
		{
		}
		public FtpInputDataStream GetInputStream()
		{
			return (FtpInputDataStream)GetStream(0, TransferDirection.Download);
		}
		public FtpOutputDataStream GetOutputStream()
		{
			return (FtpOutputDataStream)GetStream(0, TransferDirection.Upload);
		}
		public FtpInputDataStream GetInputStream(long offset)
		{
			return (FtpInputDataStream)GetStream(offset, TransferDirection.Download);
		}
		public FtpOutputDataStream GetOutputStream(long offset)
		{
			return (FtpOutputDataStream)GetStream(offset, TransferDirection.Upload);
		}
		private FtpDataStream GetStream(long offset, TransferDirection dir)
		{
			m_parent.CheckSessionCurrentDirectory();
			SessionConnected session = m_parent.FtpSession;
			if(offset != 0) 
				session.ControlChannel.REST(offset);
			FtpDataStream stream = session.ControlChannel.GetPassiveDataStream(dir);
			try {
				if(dir == TransferDirection.Download)
					session.ControlChannel.RETR(m_name);
				else
					session.ControlChannel.STOR(m_name);
			}catch(Exception) {
				stream.Dispose();
				throw;
			}
			return stream;
		}
	}
}

⌨️ 快捷键说明

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