更改 FileStream 写入编码类型

2024-01-22

这是我的代码:

public static string DownloadFile(string FtpUrl, string FileNameToDownload,
                   string userName, string password, string tempDirPath)
    {
        string ResponseDescription = "";
        string PureFileName = new FileInfo(FileNameToDownload).Name;
        string DownloadedFilePath = tempDirPath + "/" + PureFileName;
        string downloadUrl = String.Format("{0}/{1}", FtpUrl, FileNameToDownload);
        FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(downloadUrl);
        req.Method = WebRequestMethods.Ftp.DownloadFile;
        req.Credentials = new NetworkCredential(userName, password);
        req.UseBinary = true;
        req.Proxy = null;
        try
        {
            FtpWebResponse response = (FtpWebResponse)req.GetResponse();
            Stream stream = response.GetResponseStream();
            byte[] buffer = new byte[2048];
            FileStream fs = new FileStream(DownloadedFilePath, FileMode.Create);
            int ReadCount = stream.Read(buffer, 0, buffer.Length);
            while (ReadCount > 0)
            {

              fs.Write(buffer, 0, ReadCount);
              ReadCount = stream.Read(buffer, 0, buffer.Length);
            }
            ResponseDescription = response.StatusDescription;
            fs.Close();

            stream.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        return ResponseDescription;
    }

}

此代码从 ftp 服务器下载文件并将其写入服务器中的特定路径。 但保存的文件的编码不是UTF-8。 我想将文件的编码类型更改为UTF-8。 我必须使用 StreamReader 吗? 我怎样才能修改该代码?


理论上,以下内容应该有效,但这取决于响应流是否可以与流读取器一起工作。 使用不同的编码进行写入很容易,您可以简单地使用流写入器(基于文本写入器)而不是文件流。但是,您不能直接写入字节,因为您必须写入格式正确的文本。为此,必须使用正确的原始编码将字节转换为文本(字符缓冲区)。

    char[] buffer = new char[2048]; //or 1024 if you want to keep the same block size
    using (var reader = new StreamReader(stream, Encoding.Unicode)) // <= Or whatever encoding the orignal is
    {
        using (var tw = new StreamWriter(DownloadedFilePath, false, Encoding.UTF8)) //streamwriter instead of filestream
        {                
            while (true)
            {
                int ReadCount = reader.Read(buffer, 0, buffer.Length);
                if (ReadCount == 0) break;
                tw.Write(buffer, 0, ReadCount);                    
            }
            ResponseDescription = response.StatusDescription;
            stream.Close();
            tw.Close();
        }
    }

如果流读取器出现问题,您还可以先下载字节,然后对已下载的字节使用流读取器。

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

更改 FileStream 写入编码类型 的相关文章

  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 当下拉列表内部触发选定索引更改事件时,引导模式关闭

    我在 Bootstrap 模式中有一个 ASP NET 图表 一切都工作正常 直到我在里面添加了一个下拉列表 每次我在下拉列表中选择一个新项目时 所选项目更改事件都会触发 并且如果事件内没有代码 则 Boostrap 模式会关闭 这是模式引
  • 验证插件在更新面板中不起作用

    我有一个更新面板 面板内有文本框和按钮可用 现在我正在使用 jQuery Validation 插件 但是在更新面板中使用时验证插件不起作用 例如 function GetAddressTargetList var objArray new
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 无需安装即可部署 Expression Encoder SDK

    我试图在使用 Microsoft Expression Encoder 3 SDK 时证明一个概念 我正在尝试将 SDK 部署到我的托管 Web 服务器 以了解更多关于它是否有效以及还需要安装什么的信息 我无法在服务器上进行任何操作 以下是
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 在 Flutter 中保存照片(尤其是保存到相机胶卷)

    我不知道如何保存到相机胶卷 相当于React Native的CameraRoll saveToCameraRoll https facebook github io react native docs cameraroll html sav
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • 在 docker 容器内挂载 nfs 共享

    有谁知道如何使用 centos 基础镜像在 docker 容器内挂载 nfs 共享 我试过这个命令 mount server dir mount point 并得到下一个错误 mount nfs rpc statd is not runni
  • 正则表达式:查找没有子串的字符串

    我有一篇大文字 Big piece of text This sentence includes regexp word And this sentence doesn t include that word 我需要找到以 开头的子字符串t
  • 与多个字段和 mongodb 中的 where 条件不同

    我想写一个相当于distinct and where in mongodb SQL查询是select DISTINCT key score from GPC where note test2 and notetwo meet2 id Obj
  • 自定义 iOS Twitter 身份验证页面?

    我正在制作一个移动应用程序 用户可以将他们的 Twitter 帐户连接到该应用程序 我只是有点好奇最好的方法是什么 现在 我希望能够制作自己的自定义页面 无需使用 UIWebView 这可能吗 如果怎样 那么 Thanks 据我了解 您不希
  • 如何在 Node.js server.listen() 中使用可选的主机名参数

    从我到目前为止在教程中读到的内容来看 可选的hostname参数为server listen port hostname backlog callback 一直都是127 0 0 1 环回 0 0 0 0 监听每个可用的网络接口 默认选项
  • Tomcat 中是否可以让一个 appBase 由多个上下文路径提供服务?

    Tomcat 中是否可以让一个 appBase 由多个上下文路径提供服务 我有一个应用程序库 最近替换了第二个应用程序库 我的问题是许多用户仍然访问旧的上下文 我想从单个 appBase 提供现在常见的应用程序 但可以通过任一上下文访问 我
  • Jasmine:可观察到的单元测试 http 服务错误

    我对如何模拟我的 http 服务捕获可观察到的错误感到非常困惑 我已阅读角度文档 但我不明白如何构建测试 我想模拟我的服务中的错误 然后检查它是否捕获了可观察到的错误 我有另一个服务可以创建并抛出可观察到的错误 我的其余服务只是在遇到错误时
  • 我的 MVC 自定义 ControllerFactory 可以工作,但还能更好吗?

    我研究过 Ninject StructureMap 和其他依赖注入和服务定位器框架 但这个问题更多的是关于了解它是如何工作的以及什么可以做得更好 更重要的是 我无意于查看框架的依赖注入源代码 而是了解它在实践 代码中从头到尾是如何实现的 下
  • 如何让 Git 忽略符号链接?

    我的项目文件夹中有符号链接 以便当我在 Windows 10 计算机上的本地开发服务器中运行项目时可以访问大型视频和图像目录 问题是 Git 不允许我执行 add 因为当存在符号链接时 它会给我这个错误 error readlink Pro
  • 您如何向没有 Javascript 之外的编程经验的人解释 Javascript 类型数组?

    最近我经常使用 Canvas 开发一些关于网络游戏的想法 因此 我最近遇到了 Javascript 类型数组 我已经读过一些书 例如MDN https developer mozilla org en US docs Web JavaScr
  • 错误:自构建预编译头以来系统文件已被修改

    我刚刚下载了 xcode 6 的最终版本并编译了一个我正在使用测试版的项目 现在显然生成了以下错误模拟器 有人可以帮助我解决这个问题 fatal error file Applications Xcode app Contents Deve
  • 如何在asp .net core web api中获取后台服务中的主机URL?

    我有一个 Asp Net core Web api 它将运行后台服务来每天安排一些任务并发送一些邮件 在邮件中我需要有 api 的 url 除了控制器之外 还有什么方法可以在后台服务中获取主机 URL 后台服务在 Web 请求的范围之外运行
  • javax.xml.soap.MessageFactory的实例是线程安全的吗?

    有人知道 javax xml soap MessageFactory 的实例是否是线程安全的吗 我找不到任何与之相关的文档 如果您没有看到任何关于某些东西是否是线程安全的文档 您应该假设它不是 如果你假设它是 但事实并非如此 这将避免很多头
  • postgresql 中 mmm yyyy 格式的日期

    我有一个表 其中有一列没有时区的时间戳类型 我想选择该列mmm yyyy格式 例如 2011 年 3 月 怎么格式化成这样呢 我试过 select cast now as date 但它给了我不正确的格式 SELECT TO CHAR NO
  • 用 React 计算 SVG 边界框?

    我正在编写一个使用 React 生成 SVG 的可视化应用程序 我需要的部分之一是标签 即文本 由封闭框包围 带有可变文本 可能会旋转和设置样式 所以我有一个组件NodeLabel 目前具有固定尺寸 render return
  • 使用多列的参数化 IN 子句

    我有一个沿着这些线的查询 我试图通过比较元组来过滤结果集 例如SQL IN 子句中的多列 https stackoverflow com questions 13027708 sql multiple columns in in claus
  • Xcode UI 测试无密码身份验证

    我应该如何测试我的 iPhone 应用程序无密码认证 https medium com ninjudd passwords are obsolete 9ed56d483eb 要注册或登录 Xcode 中的 UI 测试 https devel
  • Solr 到应用程序洞察

    如何配置 Solr 日志以发送到 Azure Application Insights 我看到可以使用 Log4J 附加程序 https learn microsoft com en us azure application insight
  • 我必须在哪里以及为什么必须放置“template”和“typename”关键字?

    在模板中 我必须在哪里以及为什么要放置typename and template关于从属名称 到底什么是从属名称 我有以下代码 template
  • 更改 FileStream 写入编码类型

    这是我的代码 public static string DownloadFile string FtpUrl string FileNameToDownload string userName string password string