打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# FTP操作类(D)


/// <summary>
        /// 移除FTP上的指定文件

        /// </summary>
        /// <param name="filename">
要移除的文件名称</param>
        public void RemoveFile(string filename)
        {
            Connect();
            SendCommand("DELE " + filename);
            ReadResponse();
            if (response != 250)
            {
                errormessage += responseStr;
            }
        }

        /// <summary>
        /// 重命名FTP上的文件

        /// </summary>
        /// <param name="oldfilename">
原文件名</param>
        /// <param name="newfilename">新文件名
</param>
        public void RenameFile(string oldfilename, string newfilename)
        {
            Connect();
            SendCommand("RNFR " + oldfilename);
            ReadResponse();
            if (response != 350)
            {
                errormessage += responseStr;
            }
            else
            {
                SendCommand("RNTO " + newfilename);
                ReadResponse();
                if (response != 250)
                {
                    errormessage += responseStr;
                }
            }
        }

        /// <summary>
        /// 获得指定文件的大小(如果FTP支持
)
        /// </summary>
        /// <param name="filename">指定的文件
</param>
        /// <returns>返回指定文件的大小
</returns>
        public long GetFileSize(string filename)
        {
            Connect();
            SendCommand("SIZE " + filename);
            ReadResponse();
            if (response != 213)
            {
                errormessage += responseStr;
            }

            return Int64.Parse(responseStr.Substring(4));
        }

        /// <summary>
        /// 上传指定的文件

        /// </summary>
        /// <param name="filename">
要上传的文件</param>
        public bool OpenUpload(string filename)
        {
            return OpenUpload(filename, filename, false);
        }

        /// <summary>
        /// 上传指定的文件

        /// </summary>
        /// <param name="filename">
本地文件名</param>
        /// <param name="remotefilename">远程要覆盖的文件名
</param>
        public bool OpenUpload(string filename, string remotefilename)
        {
            return OpenUpload(filename, remotefilename, false);
        }

        /// <summary>
        /// 上传指定的文件

        /// </summary>
        /// <param name="filename">
本地文件名</param>
        /// <param name="resume">如果存在,则尝试恢复
</param>
        public bool OpenUpload(string filename, bool resume)
        {
            return OpenUpload(filename, filename, resume);
        }

        /// <summary>
        /// 上传指定的文件

        /// </summary>
        /// <param name="filename">
本地文件名</param>
        /// <param name="remote_filename">远程要覆盖的文件名
</param>
        /// <param name="resume">如果存在,则尝试恢复
</param>
        public bool OpenUpload(string filename, string remote_filename, bool resume)
        {
            Connect();
            SetBinaryMode(true);
            OpenDataSocket();

            bytes_total = 0;

            try
            {
                file = new FileStream(filename, FileMode.Open);
            }
            catch (Exception ex)
            {
                file = null;
                errormessage += ex.Message;
                return false;
            }

            file_size = file.Length;

            if (resume)
            {
                long size = GetFileSize(remote_filename);
                SendCommand("REST " + size);
                ReadResponse();
                if (response == 350)
                    file.Seek(size, SeekOrigin.Begin);
            }

            SendCommand("STOR " + remote_filename);
            ReadResponse();

            switch (response)
            {
                case 125:
                case 150:
                    break;
                default:
                    file.Close();
                    file = null;
                    errormessage += responseStr;
                    return false;
            }
            ConnectDataSocket();

            return true;
        }

        /// <summary>
        /// 下载指定文件

        /// </summary>
        /// <param name="filename">
远程文件名称</param>
        public void OpenDownload(string filename)
        {
            OpenDownload(filename, filename, false);
        }

        /// <summary>
        /// 下载并恢复指定文件

        /// </summary>
        /// <param name="filename">
远程文件名称</param>
        /// <param name="resume">如文件存在,则尝试恢复
</param>
        public void OpenDownload(string filename, bool resume)
        {
            OpenDownload(filename, filename, resume);
        }

        /// <summary>
        /// 下载指定文件

        /// </summary>
        /// <param name="filename">
远程文件名称</param>
        /// <param name="localfilename">本地文件名
</param>
        public void OpenDownload(string remote_filename, string localfilename)
        {
            OpenDownload(remote_filename, localfilename, false);
        }

        /// <summary>
        /// 打开并下载文件

        /// </summary>
        /// <param name="remote_filename">
远程文件名称</param>
        /// <param name="local_filename">本地文件名
</param>
        /// <param name="resume">如果文件存在则恢复
</param>
        public void OpenDownload(string remote_filename, string local_filename, bool resume)
        {
            Connect();
            SetBinaryMode(true);

            bytes_total = 0;

            try
            {
                file_size = GetFileSize(remote_filename);
            }
            catch
            {
                file_size = 0;
            }

            if (resume && File.Exists(local_filename))
            {
                try
                {
                    file = new FileStream(local_filename, FileMode.Open);
                }
                catch (Exception ex)
                {
                    file = null;
                    throw new Exception(ex.Message);
                }

                SendCommand("REST " + file.Length);
                ReadResponse();
                if (response != 350)
                    throw new Exception(responseStr);
                file.Seek(file.Length, SeekOrigin.Begin);
                bytes_total = file.Length;
            }
            else
            {
                try
                {
                    file = new FileStream(local_filename, FileMode.Create);
                }
                catch (Exception ex)
                {
                    file = null;
                    throw new Exception(ex.Message);
                }
            }

            OpenDataSocket();
            SendCommand("RETR " + remote_filename);
            ReadResponse();

            switch (response)
            {
                case 125:
                case 150:
                    break;
                default:
                    file.Close();
                    file = null;
                    errormessage += responseStr;
                    return;
            }
            ConnectDataSocket();

            return;
        }

        /// <summary>
        /// 上传文件(循环调用直到上传完毕
)
        /// </summary>
        /// <returns>发送的字节数
</returns>
        public long DoUpload()
        {
            Byte[] bytes = new Byte[512];
            long bytes_got;

            try
            {
                bytes_got = file.Read(bytes, 0, bytes.Length);
                bytes_total += bytes_got;
                data_sock.Send(bytes, (int)bytes_got, 0);

                if (bytes_got <= 0)
                {
                    //上传完毕或有错误发生

                    file.Close();
                    file = null;

                    CloseDataSocket();
                    ReadResponse();
                    switch (response)
                    {
                        case 226:
                        case 250:
                            break;
                        default: //当上传中断时

                            {
                                errormessage += responseStr;
                                return -1;
                            }
                    }

                    SetBinaryMode(false);
                }
            }
            catch (Exception ex)
            {
                file.Close();
                file = null;
                CloseDataSocket();
                ReadResponse();
                SetBinaryMode(false);
                //throw ex;
                //当上传中断时

                errormessage += ex.Message;
                return -1;
            }

            return bytes_got;
        }

        /// <summary>
        /// 下载文件(循环调用直到下载完毕
)
        /// </summary>
        /// <returns>接收到的字节点
</returns>
        public long DoDownload()
        {
            Byte[] bytes = new Byte[512];
            long bytes_got;

            try
            {
                bytes_got = data_sock.Receive(bytes, bytes.Length, 0);

                if (bytes_got <= 0)
                {
                    //下载完毕或有错误发生

                    CloseDataSocket();
                    file.Close();
                    file = null;

                    ReadResponse();
                    switch (response)
                    {
                        case 226:
                        case 250:
                            break;
                        default:
                            {
                                errormessage += responseStr;
                                return -1;
                            }
                    }

                    SetBinaryMode(false);

                    return bytes_got;
                }

                file.Write(bytes, 0, (int)bytes_got);
                bytes_total += bytes_got;
            }
            catch (Exception ex)
            {
                CloseDataSocket();
                file.Close();
                file = null;
                ReadResponse();
                SetBinaryMode(false);
                //throw ex;
                //当下载中断时

                errormessage += ex.Message;
                return -1;
            }

            return bytes_got;
        }

        #endregion
    }
}

简单使用示例:


程序代码
FTP ftp = new FTP("127.0.0.1", "abc", "123456");

//建立文件夹
ftp.MakeDir("com");
ftp.ChangeDir("com");
ftp.MakeDir("mzwu");
ftp.ChangeDir("mzwu");

//文件夹列表
ArrayList list = ftp.ListDirectories();
for (int i = 0; i < list.Count; i++)
{
    Response.Write(list[i].ToString() + "<br/>");
}

//删除文件夹(不能直接删除非空文件夹)
ftp.RemoveDir("com\\mzwu");

//上传文件
ftp.Connect();
ftp.OpenUpload(@"F:\mzwucom.jpg", Path.GetFileName(@"F:\mzwucom.jpg"));
while (
ftp.DoUpload() > 0)
{
    int perc = (int)(((
ftp.BytesTotal) * 100) / ftp.FileSize);
    Response.Write(perc.ToString() + "%<br/>");
    Response.Flush();
}
ftp.Disconnect();

//下载文件
ftp.Connect();
ftp.OpenDownload("mzwucom.jpg", @"E:\mzwucom.jpg");
while (
ftp.DoDownload() > 0)
{
    int perc = (int)(((
ftp.BytesTotal) * 100) / ftp.FileSize);
    Response.Write(perc.ToString() + "%<br/>");
    Response.Flush();
}
ftp.Disconnect();

//文件列表
ArrayList list = ftp.ListFiles();
for (int i = 0; i < list.Count; i++)
{
    Response.Write(list[i].ToString() + "<br/>");
}

//文件重命名
ftp.RenameFile("mzwucom.jpg", "test.jpg");

//删除文件
ftp.RemoveFile("test.jpg");

//显示错误信息
Response.Write(ftp.errormessage);

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作
C# FTP上传、下载、删除
使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
[原创]JAVA读取文件或是数据流的源代码--涵盖了多种形式
Unity3d之截图方法
android文件访问技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服