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

如何使用FtpWebRequest(.NET)更改目录?,.net,ftp,ftpwebrequest,.net,Ftp,Ftpwebrequest,有人能告诉我如何使用FtpWebRequest更改目录吗?这似乎是一件容易的事,但我看不到 编辑 我只想补充一句…我的心不在FtpWebRequest上。如果有更好(更简单)的方法在.NET中进行FTP,请告诉我 显然,使用实时连接是没有办法的,您需要更改uri以诱使ftpwebrequest使用不同的请求(谢谢Jon) 所以我在找第三方客户 我尝试的一些开源解决方案效果不太好(不断崩溃),但我发现有一个开源解决方案通过了我的一些初步测试()。Mariya Atanasova的一篇文章显示了如

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

编辑

我只想补充一句…我的心不在FtpWebRequest上。如果有更好(更简单)的方法在.NET中进行FTP,请告诉我


显然,使用实时连接是没有办法的,您需要更改uri以诱使ftpwebrequest使用不同的请求(谢谢Jon)

所以我在找第三方客户

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

Mariya Atanasova的一篇文章显示了如何伪造它-基本上你必须将目录放在URL上

不过,我想你最好还是有一个专用的FTP库——一个不试图强迫一切都进入WebRequest方式的库。我个人没有为此使用过任何第三方库,但是搜索“FTP library.NET”会发现很多候选库


编辑:jcolebrand(如果是2006年的博客linkrot) 许多客户询问我们如何将CWD命令与我们的FtpWebRequest一起使用

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

假设您正在使用以下格式:

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

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

注意:如果您尝试直接使用
”。“
而不转义它们,uri类将剥离它们,因此
”ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/./.“
相当于
”ftp://myFtpUserName:myFtpUserPassword@myFtpUrl/“

现在让我们假设您想转到另一个用户的目录,该目录位于根目录之上一级。如果不指定用户名和密码,则相当于以匿名用户身份登录。然后使用以下uri发出一个新的
FtpWebRequest

这相当于以匿名身份登录,然后执行以下操作


您可以使用FTPWebRequest的ListDirectoryDetails方法,而不是使用FTPWebRequest的ListDirectory方法

由此,您可以使用正则表达式来获得所需的值。
就这样,在我的情况下,它对我很好

您必须关闭当前连接:

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);

我试图从codeproject中打开源代码库,但在连接到filezilla ftp服务器时,它们都给了我很多问题(不知道它们在iis ftp服务器上的工作情况如何)。我想我可能得买个部件了。谢谢你的回答。不管你使用什么样的客户端库,只要你能,就尽快切换到被动模式,前提是它给了你选择。这更可能通过防火墙等工作。我发现标记答案中描述的方法存在问题。我们使用的密码中有一个@符号,这会导致整个过程失败。有没有允许先描述目标目录,然后描述上传文件的目标文件的FTP工具?当然,问题是用户配置了不同的主目录。
"ftp://myFtpUrl/%2F/anotherUserDir"
Cd /
cd anotherUserDirectory
request.Close();
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);