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

求解决办法!!!!!!!!!!!!!!!
...全文
377 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服务端程序还控制着这个文件吧?
打开链接下载源码: https://pan.quark.cn/s/64cfd9352cf7 VLC播放器是一款备受青睐的跨平台开源多媒体播放软件,其3.0.11版本在继承既有卓越功能的同时,显著优化了对特定音视频编码格式的兼容性,尤其着重于对AVS+和DRA这两种源自中国的编码标准的支持。这一改进使得VLC不仅能够处理国际上通行的H264和H265视频编码,以及AC3音频编码,更能契合国内用户的播放需求,流畅播放采用AVS+和DRA编码的多媒体资料。1. **AVS+(Advanced Video Coding Plus)**:AVS+是中国自主设计的一种高效视频编码规范,其核心目标在于提升编码效能,减少带宽占用,特别适用于高清及超高清视频的传输。相较于早期的AVS技术,AVS+在编码效能、图像质量和实现难度上取得了更优的均衡,为国内的电视广播、IPTV、网络视频等领域提供了定制化的解决方案。2. **DRA(Digital Radio Audio)**:DRA是一种基于数字音频广播的高保真音频编码技术,由中国独立研发而成。该技术支持多样化的码率和声道布局,确保提供卓越的音频体验,同时具备优异的网络适应性及低延迟表现,适用于广播、互联网音频传输等多种使用场景。3. **H264(亦称AVC)**:H264是一种高效视频压缩规范,广泛应用于在线视频、流媒体服务、蓝光光盘等领域,其显著优势在于能够在较低的码率下呈现高清晰度的视频画面。4. **H265(亦称HEVC)**:作为H264的升级版标准,H265在压缩效率上实现了进一步突破,相同画质下可将文件大小减半,这对4K、8K等超高清视频的传输和存储尤为关键。5. **AC3(Dolby Digital)**:AC3是...

111,131

社区成员

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

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

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