有人可以告诉我如何使用FtpWebRequest更改目录吗?这似乎应该是一件容易的事,但我没有看到它。
修改
我只想添加...我没有在FtpWebRequest上设置我的心。如果有更好(更简单)的方法在.NET中进行FTP,请告诉我。
显然没有办法使用实时连接,你需要更改uri以欺骗ftpwebrequest使用不同的请求(感谢Jon)。
所以我正在寻找第三方客户......
我尝试的一些开源解决方案效果不好(不断崩溃),但我发现一个开源解决方案通过了我的一些初步测试(.NET FTP Client)。
答案 0 :(得分:13)
来自Mariya Atanasova的blog post显示了如何伪造它 - 基本上你必须将目录放在URL上。
我怀疑你可能会因为一个专门的FTP库而变得更好 - 一个不会试图强迫所有东西进入WebRequest做事的方式。我没有亲自使用任何第三方库,但搜索“FTP库.NET”会找到很多候选者。
许多客户问我们如何在我们的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的ListDirectoryDetails方法,而不是使用FTPWebRequest的ListDirectory方法。
从那你可以使用正则表达式来获得你想要的价值。 多数民众赞成在我的情况下,它对我来说很好用