为什么 FtpWebRequest 返回此现有目录的空流?

2023-12-02

我不确定为什么会得到这个结果。我在 Linux 服务器上运行它。 (这是我的小型网站的共享网络托管帐户。)

文件分组如下:

enter image description here

and the Another Dir里面有一个文件:

enter image description here

所以我试图检索的内容badname里面的目录1somelongdir1234567服务器上不存在的目录,使用以下代码:

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

the streamReader.ReadLine()仍然返回null.

有人可以解释为什么吗?


编辑:好的,伙计们,我更新了上面的代码来检索状态代码。但我还是很困惑。

首先,这是连接 URI 的三个值以及我得到的响应/输出:

示例1:

//Existing folder
"ftp://server12.some-domain.com/public_html/1somelongdir1234567"

Output:

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"

Output:

150 Accepted data connection

OpeningData

示例3:

//Nonexistent folder
"ftp://server12.some-domain.com/public_html/1somelongdir1234567/SomeBogusName"

Output:

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 分钟不活动后您将断开连接...


的 URLListDirectory/ListDirectoryDetails一般来说,方法应该以斜杠结尾。

如果没有斜杠,结果往往是不确定的。

WebRequest.Create("ftp://example.com/public_html/1somelongdir1234567/Another%20Dir/");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 FtpWebRequest 返回此现有目录的空流? 的相关文章

  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 访问 Fragment 中的资产

    我的资产文件夹中有一个字体 我在片段中这样称呼它 Typeface custom font Typeface createFromAsset getActivity getAssets fonts myFont otf 但我收到了一条 li
  • 将 XAML WPF 窗口转换为 WinForm

    是否有任何实用程序或转换器可以将 XAML WPF 窗口转换为 Net 2 0 Windows 窗体 不 而且不太可能有这样的事情 WPF 和 WinForms 是不同的框架 由于 UI 组成 布局差异 定位系统不同等差异 WPF UI 无
  • Smart Lock 多帐户分辨率始终显示

    我正在我的应用程序中实施 Google Smart Lock 我已经用一个帐户自动登录用户 并且效果很好 但是 一旦我将第二个帐户添加到组合中 它总是会显示分辨率对话框来选择我想要的帐户 即使在我选择帐户并重新启动应用程序后 这种情况仍然会
  • Unity - 获取对象指向的屏幕边缘的点?

    所以这是我的问题 我在屏幕中有一个指向特定方向的对象 为了演示目的 我添加了一个LineRenderer来表明这个方向 我的最终目标是找到对象与紫色光线与屏幕边框 白色轮廓 相交的世界点之间的距离 float DistToScreenEdg
  • 如何在 CodeIgniter 中使用多个控制器?

    我是 CodeIgniter 的新手 我刚刚浏览了他们的一些用户指南 以帮助我了解如何使用多个控制器 我已经弄清楚如何使用他们的示例之一加载多个页面 这是我的默认控制器 名为 Site php class Site extends CI C
  • 如何连接 LinQ to(类型化)数据集?

    我最近将 VS 2005 升级到 2010 并且对 LinQ 还很陌生 也许有人可以让我走上正确的道路 背景 我有一个类型化数据集 并使用表 AccessRule 扩展了标准 SQLMembershipProvider 因此 一个角色可以有
  • 如何验证 Microsoft Graph API jwt access_token 并保护您的 API?

    设想 我有一个 angular5 客户端应用程序 它使用 hello js 使用 Office 365 凭据对用户进行身份验证 客户端代码 hello init msft id configuration AppID oauth versi
  • SML (Poly) 有类似 CL 的 REPL 吗?

    以下是罗恩 加勒特 Ron Garret 的 喷气推进实验室的 Lisping 中的一段话 在 1 亿英里之外的价值 1 亿美元的硬件上调试运行的程序是一种有趣的体验 事实证明 在航天器上运行读取 评估 打印循环对于发现和解决问题非常有价值
  • LinearLayoutManager setReverseLayout() == true 但项目从底部堆叠

    这似乎是一个简单的解决方案 但似乎设置 private RecyclerView mRecyclerView private RecyclerView Adapter mAdapter private LinearLayoutManager
  • IE11 CORS 拒绝 https 上的选项

    IE11 由于某种原因拒绝 PUT 请求 但仅当我使用 https 时才拒绝 我很难找到这个问题 因为使用 http localhost 和其他浏览器都可以正常工作 控制台显示两个错误 SEC7124 Request method PUT
  • 倒计时器 - 即使在刷新或重新加载后也能保持不变

    我有一个 html 页面 其中有计数器在页面加载时启动 但问题是 如果有人刷新或重新加载页面 计数器就会重新启动 我不知道如何使用本地存储或 cookie 来确保我的计数器在重新加载时不会重置 我知道这里有类似的问题 但我的问题是我希望本地
  • ES6 中的默认参数抛出错误

    如果我们有一个函数 function add first second second return first second 称其为 add 1 2 returns 3 上面的代码工作正常 但如果我们将其称为 add undefined 2
  • 如何按索引对 Pandas DataFrame 进行排序?

    当有一个像下面这样的DataFrame时 import pandas as pd df pd DataFrame 1 index 100 29 234 1 150 columns A 如何在索引和列值的每种组合完好无损的情况下按索引对该数据
  • 使用nodejs更改系统/操作系统时间

    有没有一种方法 库可以更改系统时间 就我而言 我需要更新 Linux 机器 Debian 的时间 我知道有一种方法可以使用 shell 命令设置时间 我要问的是是否有抽象库或其他方法 如果你使用你的机器的话 这很简单date命令 但是 为此
  • java中的分页?

    我希望数字以这种格式显示 1 2 3 4 5 如果我按 5 那么它应该显示从 5 到 10 5 6 7 8 9 10 直到最大记录可用 我只是想知道如何执行此操作来显示数字 通常 您希望数据库承担分页和排序的繁重工作 例如 使用 MySQL
  • Cosmos 数据库吞吐量

    是否有任何选项可以以编程方式检索 Cosmos DB SQL API 吞吐量 我使用下面的代码来获取数据库列表 DocumentClient client new DocumentClient ClientURL ClientKey var
  • 无效的回发或回调参数

    我有一个 ASP net 应用程序 在开发环境中运行良好 但在生产环境中单击执行回发的链接时会引发以下异常 有任何想法吗 回发或回调参数无效 使用启用事件验证 在配置或 在 页 出于安全目的 这 功能验证参数 回发或回调事件发起 从服务器控
  • Docusign - 用于重新激活已关闭用户的 API

    我已经能够从管理控制台重新激活已关闭的 Docusign 用户 但是是否有 REST API 可以实现此目的 用户文档似乎没有提到这一点 我知道有一个关于这个主题的类似问题 但尚未找到解决方案 我再次发布这个问题 希望它能引起 Docusi
  • 续集不包括所有子项(如果有任何一个匹配)

    我有三个背靠背的关联表 这意味着 item level 1 有许多 item level 2 而 item level 2 有许多 item level 3 我使用搜索查询来查找名称包含搜索文本的任何父母或孩子 这意味着如果我输入abc 那
  • 为什么 FtpWebRequest 返回此现有目录的空流?

    我不确定为什么会得到这个结果 我在 Linux 服务器上运行它 这是我的小型网站的共享网络托管帐户 文件分组如下 and the Another Dir里面有一个文件 所以我试图检索的内容badname里面的目录1somelongdir12