从0自学C#03–文件流保存数据为txt/excel格式

主要介绍datatable、日志log、文件流filestream、streamwriter类,将数据保存为txt和excel格式。

1.创建TestDataTable类

CreateTable()方法创建一个数据table,SaveTableToExcel(string fileName)方法将数据table存为文件名为fileName的excel格式文件,CreateDirectory(string fileName)方法去检查文件是否存在,若不存在,则自动创建一个。

class TestDataTable: DataTable    {        public void CreateTable()        {            this.Columns.Add("Time(s)", System.Type.GetType("System.String"));            this.Columns.Add("Ch", System.Type.GetType("System.String"));            this.Columns.Add("BER", System.Type.GetType("System.String"));                        const int length1 = 4;                        const int length2 = 10;            int[][] data = new int[length1][];            //第一条数据            data[0] = new int[length2] { 13, 25, 21, 33, 28, 39, 43, 36, 42, 36 };            //第二条数据            data[1] = new int[length2] { 20, 13, 10, 5, 15, 7, 10, 14, 19, 20 };            //第三条数据            data[2] = new int[length2] { 78, 92, 65, 83, 90, 59, 63, 72, 88, 98 };            //第四条数据            data[3] = new int[length2] { 45, 49, 39, 47, 52, 76, 67, 51, 57, 67 };            for (int i = 0; i < length2; i++)            {                for (int j = 0; j < length1; j++)                {                    DataRow dr = this.NewRow();                    dr[0] = i + 1;                    dr[1] = j;                    dr[2] = data[j][i];                    this.Rows.Add(dr);                }            }        }        public void SaveTableToExcel(string fileName)        {            CreateDirectory(fileName);            StringBuilder title = new StringBuilder();            FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate);            StreamWriter writer = new StreamWriter(new BufferedStream(fileStream), System.Text.Encoding.Default);            for (int i = 0; i < this.Columns.Count; i++)            {                title.Append(this.Columns[i].ColumnName + "\t"); //栏位:自动跳到下一单元格            }            title.Append("\n");            writer.Write(title);            foreach (DataRow row in this.Rows)            {                StringBuilder content = new StringBuilder();                for (int i = 0; i < this.Columns.Count; i++)                {                    content.Append(row[i] + "\t");//内容:自动跳到下一单元格                }                content.Append("\n");                writer.Write(content);            }            writer.Close();            fileStream.Close();        }        public void CreateDirectory(string fileName)        {            DirectoryInfo directoryInfo = Directory.GetParent(fileName);            if (!directoryInfo.Exists)            {                directoryInfo.Create();            }        }      }

2.创建日志Log类

将文件名FileName定义为类的属性,在构造函数时赋值。SaveLogToTxt(string info)方法将数据info存入文件名为fileName的txt文件中。同样CreateDirectory()方法去检查文件是否存在

class Log    {        private string fileName;         public string FileName        {            set            {                this.fileName = value;            }            get            {                return this.fileName;            }        }        public Log(string fileName)        {            this.fileName = fileName;            CreateDirectory();        }          public void SaveLogToTxt(string info)          {                StreamWriter writer = null;              FileStream fileStream = null;            try              {                System.IO.FileInfo fileInfo = new System.IO.FileInfo(this.fileName);                  if (!fileInfo.Exists)                  {                      fileStream = fileInfo.Create();                      writer = new StreamWriter(fileStream);                  }                  else                  {                      fileStream = fileInfo.Open(FileMode.Append, FileAccess.Write);                      writer = new StreamWriter(fileStream);                  }                  writer.WriteLine(info);            }              finally              {                  if (writer != null)                  {                      writer.Close();                      writer.Dispose();                      fileStream.Close();                      fileStream.Dispose();                  }              }          }          public void CreateDirectory()          {              DirectoryInfo directoryInfo = Directory.GetParent(this.fileName);              if (!directoryInfo.Exists)              {                  directoryInfo.Create();              }          }      }

3.调用类方法存数据

实例化类、创建数据table,将table保存为txt格式和excel格式,以时间命名。

TestDataTable dt = new TestDataTable();dt.CreateTable();dt.Rows.Clear(); //清除数据table里所有行DateTime startTime = DateTime.Now;Log log = new Log(@"Log\" + startTime.ToString("yyyyMMddHHmmss") + ".txt");//以时间为文件命名,存在exe所在文件夹下的Log文件夹里for (int i = 0; i < 4; i++){    DataRow dr = dt.NewRow();    dr[0] = (int)second;    dr[1] = i;    dr[2] = BERByChannel[i].ToString("E2");    dt.Rows.Add(dr);//添加新行到数据table    string info = string.Format("{0}: Time(s): {1}, Ch: {2}, BER: {3}", DateTime.Now, dr[0], dr[1], dr[2]);    log.SaveLogToTxt(info);//存为txt格式                    }//存为excel格式string fileName = @"TestRecord\" + startTime.ToString("yyyyMMddHHmmss") + ".xls";dt.SaveTableToExcel(fileName);//以时间为文件命名,存在exe所在文件夹下的TestRecord文件夹里

以上就是 从0自学C#03–文件流保存数据txt/excel格式的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:07:09
从0自学C#02–子线程访问主线程(UI线程)控件
下一篇 2025年12月17日 06:07:21

相关推荐

  • win8系统无法安装软件怎么解决_win8软件安装失败的修复方法

    win8系统无法安装软件怎么解决_win8软件安装失败的修复方法win8系统无法安装软件怎么解决_win8软件安装失败的修复方法win8系统无法安装软件怎么解决_win8软件安装失败的修复方法win8系统无法安装软件怎么解决_win8软件安装失败的修复方法

    win8系统安装软件失败,通常由权限、兼容性或系统服务问题导致。首先,右键点击安装程序,选择“以管理员身份运行”解决权限不足问题;其次,尝试以兼容模式运行安装程序,如#%#$#%@%@%$#%$#%#%#$%@_0f4137ed1502b5045d6083aa258b5c++42 7模式;第三,检查…

    2026年9月5日 用户投稿
    300
  • JNA调用C++ DLL时出现异常,如何避免JVM崩溃?

    JNA调用C DLL异常处理及JVM崩溃避免策略 使用JNA调用C DLL时,DLL内部抛出的异常可能导致JVM崩溃。这是因为JNA依赖JNI,而JNI在异常处理方面缺乏对C++异常的直接捕获机制。 Java端无法捕获C++异常,导致JVM将此视为未处理异常并终止进程。 Java端无法捕获C++异常…

    2026年9月5日
    000
  • Claude和ChatGPT有什么区别_Claude与ChatGPT功能对比分析

    Claude在长文本处理和复杂指令遵循上具有显著优势,主要得益于其超大上下文窗口(可达20万token)和“宪法式AI”训练机制。这使得它能同时处理大量文本信息,在法律合同分析、技术文档总结、代码库审查等场景中表现优异。其强大的上下文记忆能力确保了长时间多轮对话的连贯性,不易“失忆”或跑题。同时,宪…

    2026年9月5日
    100
  • 谷歌电脑进化史下载指南_资源获取方式与途径

    下载谷歌电脑进化史资源的核心在于分步挖掘可靠源头并选择合适方法获取,1.优先从谷歌官方博客、github开源平台、学术数据库及互联网档案馆等权威渠道查找第一手资料;2.根据资源类型采取对应下载方式,代码通过github克隆,文档下载pdf,软件寻找官方安装包;3.使用虚拟机或模拟器解决旧软件兼容问题…

    2026年9月4日
    100
  • [C++]在windows基于C++编程署yolov8的openvino目标检测模型cmake项目部演示源码

    在#%#$#%@%@%$#%$#%#%#$%@_0f4137ed1502b5045d6083aa258b5c++42平台上,利用c++结合openvino部署yolov8目标检测模型,可以通过cmake构建项目实现高效推理。yolov8作为yolo系列的较新版本,在检测精度与推理速度方面均有显著提升…

    2026年9月4日
    100
  • Java远程调试(Remote Debugging)的那些事

    前言本文将探讨如何处理和调试那些仅在生产环境(或其他远程环境)中发生,而本地开发环境无法重现的“问题”。任何遇到这种情况的人都必须承认,试图找出这种“问题”原因的过程,很可能以一堆无根据的猜测告终:这是一个非常耗时且效率低下的过程。 还有一种情况,你得到了一个可以部署的war/jar包,只有clas…

    2026年9月4日
    100
  • .NET Framework怎么下载安装 图文详解

    .NET Framework怎么下载安装 图文详解.NET Framework怎么下载安装 图文详解.NET Framework怎么下载安装 图文详解.NET Framework怎么下载安装 图文详解

    在现代windows操作系统中,不少应用程序依然需要 .net framework 才能正常运行,尤其是一些虽然年代较久但仍被大量使用的软件。本文将全面介绍如何下载并安装 .net framework,帮助用户快速获取所需组件。 一、.NET Framework 简介 .NET Framework …

    2026年9月4日 用户投稿
    900
  • C++中如何实现私有函数仅供特定公有函数调用?

    C++:限制私有函数的访问权限 如何确保C++中的私有成员函数只能被特定的公有成员函数访问,而其他函数无法直接调用? 在C++中,这可以通过巧妙地利用类的成员函数和作用域来实现。 私有成员函数本身就具有私有访问权限,这意味着只有类内部的成员函数才能访问它。 要实现“特定公有函数”的访问限制,我们不需…

    2026年9月4日
    000
  • C++中如何用Lambda函数实现私有函数仅供公有函数调用?

    C++中使用Lambda函数模拟私有函数,仅供公有函数调用 问题:如何在C++中实现类似于其他语言中“私有函数仅供公有函数调用”的特性? 解决方法:虽然C++没有直接的“私有函数”概念像Java或C#那样,但我们可以巧妙地利用Lambda表达式来模拟这种行为。Lambda表达式创建的匿名函数,其作用…

    2026年9月4日
    100
  • ​​无法定位程序输入点于动态链接库?错误修复指南​​

    重新安装或修复出错程序,确保安装完整且无残留;2. 运行sfc++ /scannow和dism命令修复系统文件,必要时手动替换受损dll;3. 更新或重装microsoft visual c++ redistributable和.net framework等运行库;4. 更新驱动程序和系统补丁,确保…

    2026年9月4日
    400
  • C#——获取鼠标当前坐标

    c#中坐标转换的详细说明与示例: 在C#编程中,坐标转换是常见的操作,尤其是在处理用户界面时。以下是关于坐标转换的一些关键方法及其使用说明: Control.PointToScreen:将控件上的点转换为屏幕坐标系中的点。例如,如果你有一个控件上的点,需要知道它在整个屏幕上的位置,可以使用此方法。 …

    2026年9月4日
    300
  • Linux文件系统目录结构详解

    大家好,又见面了,我是你们的朋友全栈君。 引言 对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解#%#$#%@%@%$#%$#%#%#$%@_e206a54e97690c++e50cc872dd70ee896文件目录结构的标准和每个目录的…

    2026年9月4日
    200
  • 这次简单多了,最新版 MongoDB 安装

    这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装

    在 windows 10 系统上安装 mongodb 4.0.1 版本变得更为简便,基本上一路点击“下一步”就能完成安装,不再需要繁琐的配置。 首先,访问 MongoDB 官方网站,下载 MongoDB 4.0.1 版本,网址如下: https://www.php.cn/link/9cba84644…

    2026年9月4日 用户投稿
    300
  • [python]windows上安装pyaudio最简单方法

    pyaudio是一个用于处理音频流的python库,它依赖于portaudio库。如果直接使用pip命令无法安装pyaudio,可以尝试通过whl文件进行安装。以下是pyaudio通过whl文件安装的详细方法: 一、准备阶段 下载PyAudio的whl文件 访问可靠的Python包分发网站,如镜像站…

    2026年9月3日
    100
  • 如何批量读取CAD文件中右下角的角标数据(例如图号和工程名)?

    高效提取CAD图纸角标信息 本文介绍如何批量提取CAD文件(例如DXF或DWG格式)右下角的角标数据,如图号和工程名,从而简化项目文件管理。 Python程序员可以使用其强大的文本处理能力来实现此功能。 实现方法包括: 了解文件格式: 首先,需要熟悉CAD文件(DXF或DWG)的格式规范,理解其数据…

    2026年9月3日
    300
  • 认识基本的mfc控件

    在#%#$#%@%@%$#%$#%#%#$%@_0f4137ed1502b5045d6083aa258b5c++42程序中,常见的界面元素包括按钮、复选框、文本框和下拉列表等,这些元素被称为控件。许多常用的控件已被集成到操作系统中,在visual c++中,这些控件的使用简便到可以直接通过“拖放”方…

    2026年9月3日
    100
  • malloc 函数详解

    malloc 函数详解malloc 函数详解malloc 函数详解malloc 函数详解

    大家好,又见面了,我是你们的朋友全栈君。 很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的。但是但是: 一部分人还是将:malloc当作系统所提供的或者是C的关键字,事实上:malloc只是C标准库中提供的一…

    2026年9月3日 用户投稿
    400
  • 找不到ucrtbased.dll怎么办 总结4个修复方法

    找不到ucrtbased.dll怎么办 总结4个修复方法找不到ucrtbased.dll怎么办 总结4个修复方法找不到ucrtbased.dll怎么办 总结4个修复方法找不到ucrtbased.dll怎么办 总结4个修复方法

    使用#%#$#%@%@%$#%$#%#%#$%@_e855972ea937e3ffc++6bd147da9a030da时,你可能会碰到“缺少ucrtbased.dll文件,无法继续执行代码”的提示。这个dll文件属于microsoft visual c++运行库的调试组件,常见于开发环境。若系统未安…

    2026年9月3日 用户投稿
    200
  • Yandex 开发并开源 Perforator,这款开源工具每年可为企业节省数十亿美元的服务器基础设施成本

    全球领先的科技公司 yandex 开发并开源了 perforator,这是一款用于对服务器和应用程序进行持续实时监控和分析的创新工具。 Perforator 帮助开发人员识别最占资源的代码部分,并提供详细的统计数据,以便进行后续优化。通过识别代码中的低效部分并支持基于配置文件的优化,Perforat…

    2026年9月3日
    100
  • C++ STL map使用指南

    C++ STL map使用指南C++ STL map使用指南C++ STL map使用指南C++ STL map使用指南

    stl是standard template library的缩写,意为标准模板库,是c++++语言中极为关键的一部分。 1、 map容器采用红黑树结构实现,以键值对的形式保存数据,能够高效地完成从key到value的映射与检索操作。 2、 图片来源于网络 3、 函数声明格式如下: 4、 声明一个名为…

    2026年9月2日 用户投稿
    100

发表回复

登录后才能评论
关注微信