首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

FtpWebRequest如何这么邪恶

2012-08-11 
FtpWebRequest怎么这么邪恶C# codepublic bool Upload(FileInfo localFile, string remoteFileName){try{b

FtpWebRequest怎么这么邪恶

C# code
   public bool Upload(FileInfo localFile, string remoteFileName)        {            try            {                bool result = false;                if (localFile.Exists)                {                    string url = Host.TrimEnd('/') + RemotePath + remoteFileName;                    FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.UploadFile);                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();                    //上传数据                    using (Stream rs = request.GetRequestStream())                    using (FileStream fs = localFile.OpenRead())                    {                                             byte[] buffer = new byte[4096];//4K                        int count = fs.Read(buffer, 0, buffer.Length);                        while (count > 0)                        {                            try                            {                                rs.Write(buffer, 0, count);                                count = fs.Read(buffer, 0, buffer.Length);                                //request.ServicePoint.ConnectionLeaseTimeout = 1000;                            }                            catch                            {                                request.ClientCertificates.Clear();                                response.GetResponseStream().Close();                                response.Close();                                request.Abort();                                fs.Seek(count, SeekOrigin.Begin);                               // Thread.Sleep(150000);                               // request.GetRequestStream().Close();                               // rs.Close();                                GetFileList();                                Append(fs, remoteFileName);                                如果出现异常就追加文件流                            }                        }                        fs.Close();                        result = true;                    }                    return result;                }            }            catch (Exception ex)            {                throw new Exception(ex.Message);             }            throw new Exception(string.Format("本地文件不存在,文件路径:{0}", localFile.FullName));        }        /// <summary>        /// 给FTP服务器上的文件追加内容        /// </summary>        /// <param name="stream">数据流(可通过设置偏移来实现从特定位置开始上传)</param>        /// <param name="remoteFileName">FTP服务器上的文件</param>        /// <returns>返回一个值,指示是否追加成功</returns>        public bool Append(Stream stream, string remoteFileName)        {            bool result = false;            int count=0;            try            {                if (stream != null && stream.CanRead)                {                    //建立连接                    string url = Host.TrimEnd('/') + RemotePath + remoteFileName;                    FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.AppendFile);                    using (Stream rs = request.GetRequestStream())                    {                        //上传数据                        byte[] buffer = new byte[4096];//4K                         count = stream.Read(buffer, 0, buffer.Length);                        while (count > 0)                        {                            rs.Write(buffer, 0, count);                            count = stream.Read(buffer, 0, buffer.Length);                            bool zt = false;                            while (zt == false)                            {                                    rs.Write(buffer, 0, count);                                    count = stream.Read(buffer, 0, buffer.Length);                            }                        }                        result = true;                    }                }            }            catch (Exception ex)            {                stream.Seek(count, SeekOrigin.Begin);                Append(stream, remoteFileName);                            }            return result;        }        #endregion 



首先连接ftp让后上传文件Upload(),上传文件的时候出现网络异常就读取文件的偏移通过Append方法追加上传
Append方法里using (Stream rs = request.GetRequestStream())
报异常
[System.Net.WebException] = {"远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。"}
调试发现,文件上传异常后,FTP服务器里的文件无法删除,提示文件正在使用,无法删除,就导致了550无法访问的异常

如果在Upload()里上传异常后,用线程休眠Thred.sleep(6000000)后,再就可以追加文件了不会报550无法访问异常

求解决办法!!!!!!!!!!!!!!!

[解决办法]
顶!!!!!!!!!!!!

热点排行