【发布时间】:2018-02-13 14:32:16
【问题描述】:
我不确定为什么会得到这个结果。我在 Linux 服务器上运行它。 (这是我的小网站的共享虚拟主机帐户。)
文件分组如下:
Another Dir 里面有一个文件:
所以我正在尝试使用以下代码检索服务器上不存在的1somelongdir1234567 目录中的badname 目录的内容:
try
{
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(
"ftp://server12.some-domain.com/public_html/1somelongdir1234567/badname");
ftpRequest.EnableSsl = true;
ftpRequest.Credentials = new NetworkCredential("user", "password");
ftpRequest.KeepAlive = true;
ftpRequest.Timeout = -1;
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
using (FtpWebResponse response1 = (FtpWebResponse)ftpRequest.GetResponse())
{
//*****BEGIN OF EDIT*****
Console.WriteLine(response1.StatusDescription);
Console.WriteLine(response1.StatusCode);
//*****END OF EDIT*****
using (StreamReader streamReader = new StreamReader(response1.GetResponseStream()))
{
List<string> arrList = new List<string>();
for (; ; )
{
string line = streamReader.ReadLine();
//I get to here, where `line` is null????
if (string.IsNullOrEmpty(line))
break;
arrList.Add(line);
//*****BEGIN OF EDIT*****
Console.WriteLine(line);
//*****END OF EDIT*****
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
如您所见,badname 没有这样的文件夹,但我的ftpRequest.GetResponse() 没有抛出异常,而是成功,然后streamReader.ReadLine() 返回null,就像我在上面的代码中显示的那样。
更奇怪的是,如果我提供这样的实际目录:
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(
"ftp://server12.some-domain.com/public_html/1somelongdir1234567/Another%20Dir");
streamReader.ReadLine() 仍然返回 null。
谁能解释一下原因?
编辑:好的,伙计们,我更新了上面的代码以检索状态代码。不过我还是很疑惑。
首先,这是连接 URI 的三个值和我得到的响应/输出:
示例 1:
//Existing folder
"ftp://server12.some-domain.com/public_html/1somelongdir1234567"
输出:
150 Accepted data connection
OpeningData
drwxr-xr-x 3 username username 4096 Sep 5 05:51 .
drwxr-x--- 118 username 99 4096 Sep 5 05:54 ..
drwxr-xr-x 2 username username 4096 Sep 5 05:52 Another Dir
-rw-r--r-- 1 username username 11 Sep 5 05:51 test123.txt
示例 2:
//Another existing folder
"ftp://server12.some-domain.com/public_html/1somelongdir1234567/Another%20Dir"
输出:
150 Accepted data connection
OpeningData
示例 3:
//Nonexistent folder
"ftp://server12.some-domain.com/public_html/1somelongdir1234567/SomeBogusName"
输出:
150 Accepted data connection
OpeningData
那么为什么它给我的示例 2 的结果与我得到的 3 相同?
至于它是什么 ftp 服务器,我无法在网络日志和FtpWebRequest 本身中看到它。以下是我从Microsoft Network Monitor 获得的信息:
欢迎使用 Pure-FTPd [privsep] [TLS] ----------..
220-您是允许 50 个用户中的第 4 个用户... 220-当地时间现在是13:14。服务器端口:21...
220-这是一个私人系统 - 没有匿名登录..
此服务器也欢迎 220-IPv6 连接...
220 您将在 15 分钟不活动后断开连接...
【问题讨论】:
标签: c# .net ftp ftpwebrequest ftpwebresponse