如何使用FtpWebRequest(.NET)更改目录?

时间:2008-12-01 06:27:10

标签: .net ftp ftpwebrequest

有人可以告诉我如何使用FtpWebRequest更改目录吗?这似乎应该是一件容易的事,但我没有看到它。

修改

我只想添加...我没有在FtpWebRequest上设置我的心。如果有更好(更简单)的方法在.NET中进行FTP,请告诉我。


显然没有办法使用实时连接,你需要更改uri以欺骗ftpwebrequest使用不同的请求(感谢Jon)。

所以我正在寻找第三方客户......

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

3 个答案:

答案 0 :(得分:13)

来自Mariya Atanasova的blog post显示了如何伪造它 - 基本上你必须将目录放在URL上。

我怀疑你可能会因为一个专门的FTP库而变得更好 - 一个不会试图强迫所有东西进入WebRequest做事的方式。我没有亲自使用任何第三方库,但搜索“FTP库.NET”会找到很多候选者。


编辑:jcolebrand(如果2006年博客链接可能性)

  

许多客户问我们如何在我们的FtpWebRequest中使用CWD命令。

     

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

     

假设您使用以下格式:

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

上面的示例将带您进入用户的目录并列出其中的所有内容。现在让我们假设您想要向后移动2个目录并列出其中的内容(前提是您的用户有权执行此操作)。您关闭之前的FtpWebRequest并使用此uri

发出一个新的
uri = "ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/%2E%2E/%2E%2E";
  

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

     

注意:如果您尝试直接使用”..”而不转义它们,则uri类会删除它们,因此"ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/../.."相当于"ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/"

     

现在假设您要转到另一个用户的目录,该目录位于根目录上方一级。如果您未指定用户名和密码,则相当于以匿名用户身份登录。然后使用以下uri

发出新的FtpWebRequest
"ftp://myFtpUrl/%2F/anotherUserDir"
  

这相当于以匿名身份登录然后执行

Cd /
cd anotherUserDirectory

答案 1 :(得分:3)

您必须关闭当前连接:

request.Close();

用其他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);

答案 2 :(得分:2)

您可以使用FtpWebRequest的ListDirectoryDe​​tails方法,而不是使用FTPWebRequest的ListDirectory方法。

从那你可以使用正则表达式来获得你想要的价值。 多数民众赞成在我的情况下,它对我来说很好用