C# 从 FTP 服务器下载名称包含特殊字符的文件

2024-01-02

我尝试下载文件,但所有具有特殊字符的文件都无法识别。可以下载其他文件,文件名为asdf#[email protected] /cdn-cgi/l/email-protection无法下载。

Error:

远程服务器返回错误:(550) 文件不可用(例如,未找到文件、无法访问)。

在本地,创建了名称正确的文件,但它是空的。 JPG 文件也会发生同样的情况#文件名里面。我怎样才能让他们被认可呢?

//Download the file from remote path on FTP to local path
private static void Download(string remotePath, string localPath)
{
    FtpWebRequest reqFTP;
    try
    {
        reqFTP = GetWebRequest(WebRequestMethods.Ftp.DownloadFile, remotePath);
        FileStream outputStream = new FileStream(localPath, FileMode.Create);

        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
        Stream ftpStream = response.GetResponseStream();
        long cl = response.ContentLength;
        int bufferSize = 2048;
        int readCount;
        byte[] buffer = new byte[bufferSize];
        readCount = ftpStream.Read(buffer, 0, bufferSize);
        while (readCount > 0)
        {
            outputStream.Write(buffer, 0, readCount);
            readCount = ftpStream.Read(buffer, 0, bufferSize);
        }
        ftpStream.Close();
        outputStream.Close();
        response.Close();
        Console.WriteLine("File Download: ", remotePath + " is downloaded completely");
        logWriter.WriteLog("File Download: ", remotePath + " is downloaded completely, status " + response.StatusDescription);
    }
    catch (Exception ex)
    {
        logWriter.WriteLog("File Download: ", "Cannot download file from " + remotePath + " to " + localPath + "\n" + " Erro Message: " + ex.Message);
    }
}//End Download

//Web request for FTP
static public FtpWebRequest GetWebRequest(string method, string uri)
{
    Uri serverUri = new Uri(uri);

    if (serverUri.Scheme != Uri.UriSchemeFtp)
    {
        return null;
    }
    try
    {
        var reqFTP = (FtpWebRequest)FtpWebRequest.Create(serverUri);
        reqFTP.Method = method;
        reqFTP.UseBinary = true;
        reqFTP.Credentials = new NetworkCredential(userId, password);
        reqFTP.Proxy = null;
        reqFTP.KeepAlive = false;
        reqFTP.UsePassive = false;
        return reqFTP;
    }
    catch(Exception ex)
    {
        logWriter.WriteLog("Get Web Request: ","Cannot connect to " + uri + "\n" + "Error: " + ex.Message);
        return null;
    }
}

This might设计使然:根据URI标准 http://www.ietf.org/rfc/rfc2396.txt, #不是 URI 中的有效字符。因此,ftp://someServer/somePath/intro_to_c#.pdf is not有效的 URI。

您可以做的是在以下情况下正确转义文件名creatingURI:

string baseUri = "ftp://someServer/somePath/";
string file = "intro_to_c#.pdf";
string myUri = baseUri + HttpUtility.UrlEncode(file);
// yields ftp://someServer/somePath/intro_to_c%23.pdf

或者,您可以使用 UriBuilder 类,它可以正确处理转义:

Uri myUri = new UriBuilder("ftp", "someServer", 21, "somePath/intro_to_c#.pdf");
// yields ftp://someServer:21/somePath/intro_to_c%23.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 从 FTP 服务器下载名称包含特殊字符的文件 的相关文章

  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 使用 Angular ui-grid 时的列标题换行

    我已将我的 AngularJS SPA 应用程序从ng grid v2 0 7 to ui grid v3我的列标题不再环绕 我的列标题现在是单行并显示省略号 当列标题不适合时 此功能是否已被删除或者是否已被其他方法取代 我相信我已经找到了
  • SQL Server 2005 中的等周

    在 SQL Server 2008 中 可以通过以下方式找到 isoweek SELECT datepart iso week getdate 在 SQL Server 2008 之前 没有内置函数来查找 isoweek 我一直在寻找一个好
  • 如何同时使用多个键提取字典值?

    我遇到了以下问题 dict1 a 1 b 2 c 3 d 4 正常检索方法 dict1 a gt 输出 gt 1预期方法 dict1 a b gt 输出 gt 1 2 我的要求是通过同时提供多个键从字典中提取多个值 如上面预期方法中所述 有
  • 从 EST/EDT 转换为 GMT

    如何将日期时间从 EST EDT 转换为 GMT 但我不知道代码将在哪里运行 未知的本地时区 也不知道节省时间 你要TimeZoneInfo ConvertTimeToUtc http msdn microsoft com en us li
  • 找不到文件“obj\Debug\Program.exe.manifest”

    如果之前已经回答过这个问题 我们深表歉意 我的 VS2010 SP1 VB NET 环境发生了一些问题 我已经通过 ClickOnce 成功地编译和发布了项目 A 一段时间 然后尝试发布项目 B 并收到了错误 在文件 microsoft c
  • EJB 3.1 和 NIO2:监控文件系统

    我想我们大多数人都同意 NIO2 是一个很好用的东西 假设您想要监视文件系统的某些部分以获取传入的 xml 文件 现在这是一项简单的任务 但是 如果我想将这些东西集成到现有的 Java EE 应用程序中 这样我就不必启动另一个服务 应用程序
  • 如何通过复选框启用和禁用 DataGridView 中的特定行?

    我试图通过选中和取消选中 gridview 内的复选框来启用和禁用 DataGridView 中的特定行 C Windows 应用程序 我尝试使用 CellClick 事件 但未按预期工作 这是我尝试过的代码 private void da
  • Javascript removeEventListener 不在类内工作[重复]

    这个问题在这里已经有答案了 我一直在玩 es6 类 并尝试设置一个简单的鼠标类 addEventListener有效 但由于某种原因我无法删除它们removeEventListener 我猜这与上下文绑定有关 但我不知道如何解决这个问题 u
  • 如何访问共享库中的文件?

    我有一个带有 groovy 脚本的共享库 我在 jenkinsfile 中调用该脚本 如下所示 MySharedLibFunction some args 我的共享库中还有一个我想要执行的 ps1 文件 但如果我这样做powershell
  • 如何为 UIPickerView 行设置 Voice Over 辅助功能标签?

    我正在尝试使我的 Voice Over 的 UIPickerView 可访问 我注意到 UIPickerViewAccessibilityDelegate 协议相当不完整 它只允许您指定 pickerView 组件的标签和提示 而不是组件内
  • Junit4运行测试类固定次数并显示结果(eclipse)

    我希望能够运行测试类指定的次数 该类看起来像 RunWith Parameterized class public class TestSmithWaterman private static String args private sta
  • 如何使 Ionic 4 ion-col 高度相同

    我有一个带有主卡片的页面 其中包含网格内的其他小卡片 我希望所有列都具有相同的高度 这将是特定行内列之间的最大高度 这是我的模板和我的样式
  • iPhone : (id)copyWithZone:(NSZone *)zone :“区域”是什么?

    在类中实现 NSCopying 的此方法以启用复制时 区域参数使用什么 如果我设置一个新对象 我不需要用 allocWithZone 分配它 因为分配就足够了 我很困惑 这是过去的遗物 我们有多个 区域 来分配 如今 所有应用程序只有一个区
  • 流畅的 NHibernate compositeid 到映射类

    我试图弄清楚如何使用 CompositeId 来映射另一个类 这是一个测试用例 表格 TestParent TestParentId PK FavoriteColor TestChild TestParentId PK ChildName
  • Codeigniter 2.1.3:sess_destroy() 导致未定义的索引:session_id 等在 'sess_use_database' == TRUE 时发出通知

    我一直在使用数据库的会话测试 codeigniter 的功能 每当我注销 使用 sess destroy 时 我都会收到以下通知 A PHP Error was encountered Severity Notice Message Und
  • CSS3 的木炭/模拟边框效果

    有没有办法用 CSS3 绘制 木炭状 边框 这些线条在许多模型工具中很受欢迎 因为它们象征着设计阶段的工作 例如 图片在这里 http balsamiq com products mockups http balsamiq com prod
  • 如何在 C# 中访问嵌入式 .Net 图像资源所需的示例代码

    将图像文件标记为嵌入资源非常容易 但是此后如何访问该图像 请问我可以有一些示例代码吗 最直接的方法 YourProjectsBaseNamespace Properties Resources YourImageResourceName
  • PDO 数组中的重复值

    我需要从数据库获取一些货币 ID 这是我的代码 arr currency codes array USD RUB currency codes in implode array fill 0 count currency codes que
  • JQuery 日期选择器不工作

    再会 我第一次尝试使用jquery 我无法让它发挥作用 我的代码如下
  • C# 从 FTP 服务器下载名称包含特殊字符的文件

    我尝试下载文件 但所有具有特殊字符的文件都无法识别 可以下载其他文件 文件名为asdf email protected cdn cgi l email protection无法下载 Error 远程服务器返回错误 550 文件不可用 例如