csv内存流文件流

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;

namespace BFF.ExportData
{
    public class ExportFile
    {
        #region Export
        public static MemoryStream StreamToCSV<T>(IEnumerable<T> dataSource, string fileName)
            where T : class
        {
            var result = string.Empty;

            //Header
            StringBuilder headerRow = new StringBuilder();
            var properties = typeof(T).GetProperties().Select(p => new
            {
                PropertyInfo = p,
                HeaderAttr = p.GetFirstCustomAttribute<ExportHeaderAttribute>() as ExportHeaderAttribute
            })
                                                            .Where(p => p.HeaderAttr != null)
                                                            .OrderBy(p => p.HeaderAttr.Order)
                                                            .ThenBy(p => p.PropertyInfo.Name)
                                                            .ToList();

            var propertiesCount = properties.Count();

            for (int i = 0; i < propertiesCount; i++)
            {
                if (i < propertiesCount - 1)
                    headerRow.Append(properties[i].HeaderAttr.DisplayName).Append(",");
                else
                    headerRow.Append(properties[i].HeaderAttr.DisplayName).Append(Environment.NewLine);
            }

            //Data
            StringBuilder fields = new StringBuilder();
            foreach (var item in dataSource)
            {
                if (item == null)
                    continue;
                for (int i = 0; i < propertiesCount; i++)
                {
                    var propertyValue = properties[i].PropertyInfo.GetValue(item, null);
                    var displayPropertyValue = propertyValue == null ? string.Empty : propertyValue.ToString();
                    if (i < propertiesCount - 1)
                        formatStringToCSVForm(fields, displayPropertyValue, false);
                    else
                        formatStringToCSVForm(fields, displayPropertyValue, true);
                }
                fields.Append(Environment.NewLine);
            }
            //build
            result = headerRow.ToString() + fields.ToString();
            //return result;

            byte[] bytetxt = Encoding.UTF8.GetBytes(result);
            MemoryStream memstream = new MemoryStream();
            memstream.Write(bytetxt, 0, bytetxt.Length);
            memstream.Seek(0, SeekOrigin.Begin);
            return memstream;
        }

        public static void ExportToCSV<T>(IEnumerable<T> dataSource, string fileName)
            where T : class
        {
            var result = string.Empty;

            //Header
            StringBuilder headerRow = new StringBuilder();
            var properties = typeof(T).GetProperties().Select(p => new
            {
                PropertyInfo = p,
                HeaderAttr = p.GetFirstCustomAttribute<ExportHeaderAttribute>() as ExportHeaderAttribute
            })
                                                            .Where(p => p.HeaderAttr != null)
                                                            .OrderBy(p => p.HeaderAttr.Order)
                                                            .ThenBy(p => p.PropertyInfo.Name)
                                                            .ToList();

            var propertiesCount = properties.Count();

            for (int i = 0; i < propertiesCount; i++)
            {
                if (i < propertiesCount - 1)
                    headerRow.Append(properties[i].HeaderAttr.DisplayName).Append(",");
                else
                    headerRow.Append(properties[i].HeaderAttr.DisplayName).Append(Environment.NewLine);
            }

            //Data
            StringBuilder fields = new StringBuilder();
            foreach (var item in dataSource)
            {
                if (item == null)
                    continue;
                for (int i = 0; i < propertiesCount; i++)
                {
                    var propertyValue = properties[i].PropertyInfo.GetValue(item, null);
                    var displayPropertyValue = propertyValue == null ? string.Empty : propertyValue.ToString();
                    if (i < propertiesCount - 1)
                        formatStringToCSVForm(fields, displayPropertyValue, false);
                    else
                        formatStringToCSVForm(fields, displayPropertyValue, true);
                }
                fields.Append(Environment.NewLine);
            }
            //build
            result = headerRow.ToString() + fields.ToString();
            //return result;

            byte[] bytetxt = Encoding.UTF8.GetBytes(result);
            FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            f.Write(bytetxt,0,bytetxt.Length);
            f.Close();
        }

        private static void formatStringToCSVForm(StringBuilder sb, string field, bool isLast)
        {

            if (string.IsNullOrEmpty(field))
                sb.Append(",");
            else
            {
                sb.AppendFormat("\"{0}\"", field.Replace("\"", "\"\""));
                if (!isLast)
                    sb.Append(",");
            }
        }
        #endregion
    }
}
时间: 2024-11-11 10:17:48

csv内存流文件流的相关文章

用内存流 文件流 资源生成客户端(Delphi开源)

正文:很多木马生成器就是用的内存流和文件流生成客户端的,废话不多说了,代码如下: unit Main; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Inifiles; typeTForm1 = class(TForm)GroupBox1: TGroupBox;msgtitle: TEdit;GroupBox2: TGroupBo

通过httpClient请求文件流(普通文件和压缩文件)示例

前言:通过浏览器请求文件流进行文件下载这里就不说了,网上有很多例子,这里主要是记录一下工作中的另一个场景,一个服务器通过HTTPClient向另一个服务请求文件流,在内存中进行业务逻辑处理,并不需要下载到本地,当然,如果你想要下载本地也是可以的,把文件流写到本地磁盘就可以了,也可以写到文件系统中.废话不多说. 一,服务器传输的是普通的文件流,没有经过压缩 服务器: @RequestMapping(value = "/getCommonFile", method = RequestMet

C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)

一.文件流 FileStream类主要用于读写磁盘文件.常用于向磁盘存储数据或读取配置文件. 读取文件:复制代码 //文件流:读取 FileStream fileStream = File.Open(@"D:\test.txt", FileMode.Open);//初始化文件流 byte[] array = new byte[fileStream.Length];//初始化字节数组,用来暂存读取到的字节 fileStream.Read(array, 0, array.Length);/

未关闭的文件流会引起内存泄露么?

最近接触了一些面试者,在面试过程中有涉及到内存泄露的问题,其中有不少人回答说,如果文件打开后,没有关闭会导致内存泄露.当被继续追问,为什么会导致内存泄露时,大部分人都没有回答出来. 本文将具体讲一讲 文件(流)未关闭与内存泄露的关系. 什么是内存泄露 定义:当生命周期长的实例L 不合理地持有一个生命周期短的实例S,导致S实例无法被正常回收 举例说明 上面的代码可能会发生内存泄露 我们调用AppSettings.getInstance.setup()传入一个Activity实例 当上述的Activ

笔记:I/O流-内存映射文件

内存映射文件时利用虚拟内存实现来将一个文件或者文件的一部分映射到内存中,然后整个文件就可以当作数组一样的访问,这个比传统的文件操作要快得多,Java 使用内存映射文件首先需要从文件中获取一个channel(通道),通道时磁盘文件的一个抽象,他使得我们可以访问诸如内存映射.文件加锁机制以及文件间快速数据传递等操作系统特性,然后通过调用 FileChannel 类的 map 方法从这个通道获取一个映射块(ByteBuffer),然后就可以读取/写入文件块内容,map 支持的模式有如下: FileCh

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

编程中的文件流

最近在看JAVA核心技术,本以为想看懂一些文件流,还有一些东西,但是自己没有理解. 这里我在网上总结的一些文件流的知识,希望可以对大家理解有帮助!!    什么是流? 流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向.流不但可以处理文件,还可以处理动态内存.网络数据等多种数据形式.如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的.

C#四种文件流的区别

1.FileStream类的读写操作 FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率. 代码实例: //创建文件读取对象 using(FileStream fileReader=new FileStream (文件的物理路径,FileMode.Open)) { //创建文件写入对象 using(FileStream fileWrite=new FileStream (需要保存的文件物理路径+文件后缀名,Fil

c++文件流的基本操作

C++编程语言在实际编程中,对于文件的操作是一个比较简单的操作,大家可以通过一些简单的实例就能充分的掌握这一应用技巧,并在实际编程中给自己的程序开发带来一些帮助.下面就让我们一起来看看C++文件流操作的相关应用技巧吧. C++文件流操作之文件写入: #include < fstream> #include < iostream> using namespace std; int main(){ string str; ofstream out("d.txt");