FtpWebRequest怎么这么邪恶

cdzy12156 2012-07-10 03:32:14

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无法访问异常

求解决办法!!!!!!!!!!!!!!!
...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pc498471249 2014-12-14
  • 打赏
  • 举报
回复
求助 我也遇到这个问题了。 要等5分钟之后 再续传才可以,否则就报550 , 怎么解决啊。
cdzy12156 2012-07-10
  • 打赏
  • 举报
回复
没人?顶上去!!!!!
cdzy12156 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
因为连接没断开,那边FTP服务端程序还控制着这个文件吧?
[/Quote]

我就是不知道怎么断开,请教,,,,,,
cpio 2012-07-10
  • 打赏
  • 举报
回复
因为连接没断开,那边FTP服务端程序还控制着这个文件吧?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧