我正在开发一个wpf应用程序,我想使用不同用户名的C#在ftp上创建一个目录,如果它已经存在,则将文件保存在现有目录中。
我已成功创建了检查现有目录的逻辑,但在创建新目录时,我在运行时遇到异常:
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
我在互联网上检查了不同的解决方案,大多数人都说这是由于写入权限。我正在分配ftp文件夹写权限,但我仍然遇到问题。请帮帮忙?
这是我的代码:
static void CreateFtpFolder(string source)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(source);
request.Credentials = new NetworkCredential(ftpusername, ftppassword);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.UsePassive = true;
request.UseBinary = false;
request.KeepAlive = false;
request.Proxy = null;
FtpWebResponse ftpResp = request.GetResponse() as FtpWebResponse;
}
我在FtpWebResponse
上收到错误。
答案 0 :(得分:5)
你的代码看起来很好.......你说的是你也分配了许可。 唯一的问题是你可能传递了一个错误的“源”,导致问题。检查你的源字符串可能有错误......
路径应该像
WebRequest request = WebRequest.Create("ftp://host.com/directory123");
它意味着将使用名称“directory12”创建目录 如果你正在指定这样的路径
WebRequest request = WebRequest.Create("ftp://host.com/directory123/directory1234");
这意味着“ftp://host.com/directory123/”应该已经存在,并且将创建名为“directory1234”的新目录 希望它会有所帮助
答案 1 :(得分:3)
如果问题是Windows服务器端权限问题并且您可以访问此FTP服务器,则可以通过修改权限并添加“写入”来解决此问题。对您在实际物理目录上进行身份验证的用户名的权限。
e.g。如果' ftp://host/'指向' c:\ inetpub \ ftproot'在您的服务器上,然后允许“写”'该目录上的用户权限。
我正在设置自己的IIS 7 FTP服务器并花了一两个小时试图让这么简单的C#客户端代码片段起作用,所以我认为我会为类似情况的人做出贡献。
答案 2 :(得分:1)
如果目录已存在,则会出现该错误。非常描述性的错误消息(lol)。必须在try.GetResponse()
的调用周围试一试try
{
FtpWebResponse ftpResp = request.GetResponse() as FtpWebResponse;
}
catch ( Exception ex ) { /* ignore */ }