【问题标题】:The remote server returned an error: (550) File unavailable(Error occured on making ftp directory)远程服务器返回错误:(550)文件不可用(创建ftp目录时出错)
【发布时间】:2013-06-13 14:41:38
【问题描述】:

我正在开发一个 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 出现错误。

【问题讨论】:

  • 尝试使用命令行 FTP 客户端复制错误。也许服务器返回的实际错误会比您在代码中看到的信息更丰富?但是,是的,这听起来像是一个可能的服务器端权限问题......

标签: c# .net ftp directory


【解决方案1】:

您的代码看起来不错.......您是说您也分配了权限。 唯一的问题是您可能传递了错误的“源”,这会导致问题..检查您的源字符串它可能有错误......

路径应该是这样的

 WebRequest request = WebRequest.Create("ftp://host.com/directory123");

这意味着将创建名为“directory12”的目录 如果您正在指定这样的路径

 WebRequest request = WebRequest.Create("ftp://host.com/directory123/directory1234");

这意味着“ftp://host.com/directory123/”应该已经存在,并且将创建名为“directory1234”的新目录 希望对你有帮助

【讨论】:

  • 嗨。我得到了同样的错误。该应用程序适用于除此客户之外的其他所有人。我们一直在尝试检查防火墙,但这并没有放弃任何可以使用的东西。已经快一个月了,每天都在尝试解决这个问题。目前我远程到机器,将文件复制到我的本地 PC,然后使用具有相同凭据的相同应用程序并且它可以工作。关于他为什么失败的任何想法?
【解决方案2】:

如果问题是 Windows 服务器端权限问题并且您有权访问此 FTP 服务器,您可以通过修改权限并为您在实际的物理目录。

例如如果“ftp://host/”指向您服务器上的“c:\inetpub\ftproot”,则允许该目录上的用户具有“写入”权限。

我正在设置自己的 IIS 7 FTP 服务器,并花了一两个小时试图让如此简单的 C# 客户端代码 sn-p 工作,所以我想我会为那些处于类似情况的人做出贡献。

【讨论】:

    【解决方案3】:

    如果目录已存在,您将收到该错误。相当非描述性的错误消息(大声笑)。必须对 request.GetResponse() 的调用进行尝试捕获

    try
    {
    FtpWebResponse ftpResp = request.GetResponse() as FtpWebResponse;
    
    }
    catch ( Exception ex ) { /* ignore */ }
    

    【讨论】:

    • 不是一个好主意。那里可能会发生很多可能的异常,而您都忽略了它们。