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无法访问异常
求解决办法!!!!!!!!!!!!!!!
[解决办法]
顶!!!!!!!!!!!!