如何使用 FtpWebRequest (.NET) 更改目录?
-
11-07-2019 - |
题
有人可以告诉我如何使用 FtpWebRequest 更改目录吗?这看起来应该是一件很容易做到的事情,但我没有看到它。
编辑
我只是想补充...我对 FtpWebRequest 没有兴趣。如果有更好(更简单)的方法在 .NET 中执行 FTP,请告诉我。
显然没有办法使用实时连接来做到这一点,您需要更改 uri 来欺骗 ftpwebrequest 使用不同的请求(感谢 Jon)。
所以我正在寻找第3方客户端......
我尝试过的一些开源解决方案效果不太好(不断崩溃),但我发现一个开源解决方案通过了我的一些初步测试(.NET FTP 客户端).
解决方案
有从玛丽亚Atanasova一个博客文章这显示了如何捏造事实 - 基本上你必须把目录上的网址
我怀疑你可能是用专用的FTP库虽然过得更好 - 一个不尝试一切强迫做事情的方式的WebRequest。我没有亲自使用这方面的任何第三方库,但对于“FTP库.NET”一搜发现很多考生。
编辑:jcolebrand(在2006年博客linkrot可能性的情况下)
许多客户问我们,他们如何使用CWD命令与我们的FtpWebRequest。
答案是:你不能直接使用该命令,但可以修改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/"
现在让我们说你要到其他用户的目录是一个级别的根部以上。如果不指定用户名和密码,它等同于记录在为匿名用户。然后你发出新的
FtpWebRequest
具有以下URI
"ftp://myFtpUrl/%2F/anotherUserDir"
这相当于作为匿名登录,然后做
Cd /
cd anotherUserDirectory
其他提示
您必须关闭当前连接:
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);
您可以使用 FtpWebRequest 的 ListDirectoryDetails 方法,而不是使用 FTPWebRequest 的 ListDirectory 方法。
由此您可以使用正则表达式来获取您想要的值。就是这样,就我而言,它工作得很好