代码之家  ›  专栏  ›  技术社区  ›  Giovanni Galbo

如何使用ftpWebRequest(.net)更改目录?

  •  8
  • Giovanni Galbo  · 技术社区  · 16 年前

    有人能告诉我如何使用ftpWebRequest更改目录吗?这似乎是一件容易的事情,但我看不到。

    编辑

    我只是想补充一下……我对FTP数据库没有信心。如果有更好(更简单)的方法在.NET中执行ftp,请告诉我。


    显然,没有办法使用实时连接来完成这项工作,您需要更改URI来欺骗ftpWebRequest使用不同的请求(谢谢Jon)。

    所以我在找第三方客户…

    我尝试的一些开源解决方案工作得不太好(不断崩溃),但我发现一个开源解决方案通过了我的一些初步测试。( .NET FTP Client )

    3 回复  |  直到 8 年前
        1
  •  12
  •   jcolebrand    12 年前

    有一个 blog post 从MariyaAtanasova,它展示了你如何伪造它-基本上你必须把目录放在URL上。

    不过,我怀疑你最好使用一个专用的ftp库,它不会强迫所有东西都以webrequest的方式进行操作。我没有亲自使用过任何第三方库,但是搜索“ftp library.net”可以找到很多候选库。


    编辑:jcolebrand(2006年博客linkrot可能性)

    许多客户询问我们如何在ftpwebrequest中使用cwd命令。

    答案是:不能直接使用该命令,但可以修改uri参数以获得相同的结果。

    假设您使用以下格式:

    String uri = "ftp://myFtpUserName:myFtpUserPassword@myFtpUrl";
    FtpWebRequest Request = (FtpWebRequest)WebRequest.Create(uri);
    Request.Method = "LIST";
    

    上面的示例将把您带到用户的目录,并列出其中的所有内容。现在假设您想向后移动2个目录并在其中列出内容(前提是您的用户有权这样做)。关闭上一个ftpwebRequest并使用此uri发布一个新的ftpwebRequest

    uri = "ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/%2E%2E/%2E%2E";
    

    这相当于使用用户的凭据登录,然后使用 cd ../../

    注意:如果您尝试使用 ”..” 在不转义它们的情况下,uri类将直接除去它们,因此 "ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/../.." 等于 "ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/"

    现在假设您要转到另一个用户的目录,该目录位于根目录之上一个级别。如果不指定用户名和密码,则等同于以匿名用户身份登录。然后你发布一个新的 FtpWebRequest 使用以下URI

    "ftp://myFtpUrl/%2F/anotherUserDir"
    

    这相当于以匿名方式登录然后执行

    Cd /
    cd anotherUserDirectory
    
        2
  •  3
  •   Giochi Blu    8 年前

    您必须关闭当前连接:

    request.Close();
    

    并用另一个URI打开一个新的URI:

    uri = "ftp://example.com/%2F/directory" //Go to a forward directory (cd directory)
    uri = "ftp://example.com/%2E%2E" //Go to the previously directory (cd ../)
    
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
    
        3
  •  2
  •   Chintan Udeshi    13 年前

    可以使用ftpWebRequest的ListDirectoryDetails方法,而不是使用ftpWebRequest的ListDirectoryDetails方法。

    从中可以使用正则表达式来获取所需的值。 就这样,在我的情况下,它对我很有用