C#开发ftp客户端遇到550错误
最近使用c#开发一个简易的ftp客户端,在测试上传功能的时候发现抛出一个错误,【远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)】。
然后我就通过vs调试的工具跟了一下,发现出现异常的地方在下面的代码段那
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
我们可以知道前面的什么验证用户名,密码都是没有错误的,同时Connect函数也顺利通过了,所以我感觉我是连接上服务器了。那么出现错误的这行代码是什么意思呢,这个函数的意思是新建了一个流对象strm,然后读buff里面的数据写到这个流对象里面,这个时候就报错了,肯定是读的时候出错了,脑子里第一反应就是权限问题,也就是说本地无法写文件到服务器里去。
解决办法
显然是服务器那边的问题,这里测试使用的是Windows 2003搭建的一个ftp服务器,由于服务器搭建的默认权限是只有读取,所以我们需要把这里修改一下。
首先进入管理工具中的Internet信息服务(IIS)管理器
选择ftp站点的属性
选择主目录,把写入的权限给勾选
这样设置好了,再使用上传功能就不会报以前的错误了。
最后贴上ftp客户端类的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Windows.Forms;
namespace Ftp
{
class FtpClient
{
string ftpSrvIP;
public string FtpSrvIP
{
get { return ftpSrvIP; }
set { ftpSrvIP = value; }
}
string ftpUserID;
public string FtpUserID
{
get { return ftpUserID; }
set { ftpUserID = value; }
}
string ftpPasswd;
public string FtpPasswd
{
get { return ftpPasswd; }
set { ftpPasswd = value; }
}
FtpWebRequest reqFTP;
private void Connect(String path)//连接ftp
{
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
// 指定数据传输类型
reqFTP.UseBinary = true;
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPasswd);
}
private string[] GetFileList(