C#读写各类文件合集

这篇具有很好参考价值的文章主要介绍了C#读写各类文件合集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、利用字节流与文件流读写txt、json文件

1.以文件的方式进行操作

适用于小型文本全文的读取和写入。
首先创建C#窗体程序,然后写入以下代码:

string filePath = @"D:\Test_C#\TestTxt.txt";
// 1、文件操作类(File)
void FileDo()
{
    string ret = "";
    #region 读取
    {
        //File.ReadAllBytes打开一个二进制文件,将文件的内容读入一个字节数组,然后关闭该文件。因为可以读取到每个字节 所以可以处理所有类型的文件
        byte[] buffer1 = File.ReadAllBytes(filePath);
        //File.ReadAllText 打开一个文本文件,将文件中的所有文本读取到一个字符串中,然后关闭此文件。
        string alltxt = File.ReadAllText(filePath);
        string[] lines = File.ReadAllLines(filePath);
        ret = Encoding.UTF8.GetString(buffer1);
        Console.WriteLine(ret);
    }
    #endregion

    #region 写入
    {
        //覆盖式写入
        byte[] buffer2 = Encoding.UTF8.GetBytes(ret+"\n黄河入海流");
        //File.WriteAllBytes创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。 如果目标文件已存在,则覆盖该文件。
        File.WriteAllBytes(filePath, buffer2);
        //File.WriteAllText 创建一个新文件,向其中写入内容,然后关闭文件。 如果目标文件已存在,则覆盖该文件。
        File.WriteAllText(filePath2, ret);
    }
    #endregion
}

2.以文件流的方式进行读写

void FileStreamDo()
{
    #region 读取
    byte[] buffer;
    //方式1
    //1.FileStream文件流——这个类主要用于在二进制文件中读写二进制数据。
    //FileStream类操作字节和字节数组,有些操作比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。
    using (FileStream fs = new FileStream(filePath, FileMode.Open))
    {
        buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
    }
    //2.StreamReader(流读取器)和StreamWriter(流写入器)这两个类专门用于文本格式的流产品API
    //3.BinaryReader和BinaryWriter这两个类专门用于读写二进制格式的流产品API.
    //方式2
    //using (FileStream fs = File.OpenRead(filePath))
    //{
    //    buffer = new byte[fs.Length];
    //    fs.Read(buffer, 0, buffer.Length);
    //}
    #endregion
    //读取1中文件流,写入2中
    #region 写入
    using (FileStream fs = new FileStream(filePath2, FileMode.Create))
    {
        buffer = Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(buffer)+"\n欲穷千里目");
        fs.Write(buffer, 0, buffer.Length);
        fs.Close();
    }
    #endregion
}

3.以二进制数据流的方式进行读写

void BinaryDo()
{
    #region 读取
    byte[] buffer;
    //方式1
    //Stream类操作字符数据。字符数据易于使用
    using (Stream stream = File.Open(filePath2, FileMode.Open))
    {
        using (BinaryReader reader = new BinaryReader(stream))
        {
            buffer = reader.ReadBytes((int)stream.Length); //将流读入到字节数组中
        }
    }
    #endregion
    #region 写入
    using (Stream stream = File.Open(filePath3, FileMode.Create))
    {
        using (BinaryWriter writer = new BinaryWriter(stream))
        {
            writer.Write(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(buffer) + "\n更上一层楼"));
        }
    }
    #endregion
}

4.以文本流的方式进行读写

void StreamDo()
{
    string text = "";
    #region 读取
    using (StreamReader reader = new StreamReader(filePath3))
    {
        text = reader.ReadToEnd();
        Console.WriteLine(text);
    }
    #endregion

    #region 写入
    using (FileStream fs = new FileStream(filePath4, FileMode.Create))
    {
        using (StreamWriter writer = new StreamWriter(fs))
        {
            writer.Write(text+"\nThis is tuesday!");
        }
    }
    #endregion
}

5.JOSN文件的读写

首先安装依赖包

Install - Package Newtonsoft.Json

config.json内容如下:

{
  "server": "1.1.1.1",
  "user": "sa",
  "passwd": "1"
}

代码块入下:

void Get_Json()
{
    try
    {
        StreamReader reader = File.OpenText(filePath5);
        JsonTextReader jsonTextReader = new JsonTextReader(reader);
        JObject jsonObject = (JObject)JToken.ReadFrom(jsonTextReader);
        string server = jsonObject["server"].ToString(); //user ,passwd 类似
        reader.Close();
        Console.WriteLine(server);
    }
    catch (Exception ex)
    {
        Console.WriteLine("读取错误" + ex);
    }
}

void Set_Json(string server)
{
    try
    {
        StreamReader reader = File.OpenText(filePath5);
        JsonTextReader jsonTextReader = new JsonTextReader(reader);
        JObject jsonObject = (JObject)JToken.ReadFrom(jsonTextReader);
        jsonObject["server"] = server; 
        reader.Close();
        string output = JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);
        File.WriteAllText(filePath5, output);
    }
    catch(Exception ex)
    {
        Console.WriteLine("写入错误"+ex);
    }
}

//Set_server("1.1.1.2");
//Get_server();

二、kernel32读写ini文件

创建.ini文件,内容如下:
(注意文件编码格式使用ANSI,否则读取会出现乱码)

[Information]
Name=醒醒
Gender=男
Age=35
Region=广东

然后写入以下代码块:

string filePath6 = @"D:\Test_C#\temp.ini";
/// 获取值
/// <param name="section">段落名</param>
/// <param name="key">键名</param>
/// <param name="defval">读取异常是的缺省值</param>
/// <param name="retval">键名所对应的的值,没有找到返回空值</param>
/// <param name="size">返回值允许的大小</param>
/// <param name="filepath">ini文件的完整路径</param>
[DllImport("kernel32.dll")]
static extern int GetPrivateProfileString(
            string section,
            string key,
            string defval,
            StringBuilder retval,
            int size,
            string filepath);
// 写入
[DllImport("kernel32.dll")]
static extern int WritePrivateProfileString(
    string section,
    string key,
    string val,
    string filepath);

// 获取数据
static string getString(string section, string key, string def, string filename)
{
    StringBuilder sb = new StringBuilder(1024);
    GetPrivateProfileString(section, key, def, sb, 1024, filename);
    return sb.ToString();
}
// 写入数据
static void writeString(string section, string key, string val, string filename)
{
    WritePrivateProfileString(section, key, val, filename);
}
//调用上述方法
void IniDO()
{
    string names = getString("Information", "Name", null, filePath6);
    string gender = getString("Information", "Gender", null, filePath6);
    string age = getString("Information", "Age", null, filePath6);
    string region = getString("Information", "Region", null, filePath6);
    Console.WriteLine("名称:"+names+"\n性别:"+ gender + "\n年龄:"+ age + "\n籍贯:" + region);
}
//IniDO();

三、XML文件的读写

1.DataSet读取操作

创建两个.xml文件,内容如下:
不带ID的文件

<?xml version="1.0" encoding="utf-8" ?>
<studentList>
	<student>
		<name>张三</name>
		<sex></sex>
		<old>20</old>
	</student>
	<student>
		<name>李四</name>
		<sex></sex>
		<old>21</old>
	</student>
</studentList>

带ID的文件

<?xml version="1.0" encoding="utf-8" ?>
<studentList>
	<student Type="Bad" ISBN="541801">
		<name id="1">张三</name>
		<sex id="11"></sex>
		<old id="111">20</old>
	</student>
	<student Type="Good" ISBN="541802">
		<name id="2">李四</name>
		<sex id="22"></sex>
		<old id="222">21</old>
	</student>
</studentList>

C#代码块如下:

void DataSet_ReadXml()
{
    //dataset读取简单xml文件
    DataSet ds = new DataSet();
    ds.ReadXml(filePath7);
    //读取第一条数据的name节点
    string name = ds.Tables[0].Rows[0]["name"].ToString();
    //输出:张三
    Console.WriteLine(name);
}

void DataSet_ReadXml_id()
{
    //dataset读取带属性的xml文件
    DataSet ds = new DataSet();
    ds.ReadXml(filePath8);
    //读取的节点名称
    string nodeName = "name";
    string name = "";
    name = ds.Tables[nodeName].Rows[0][nodeName + "_Text"].ToString();
    //读取节点的id属性
    string id = ds.Tables[nodeName].Rows[0]["id"].ToString();
    //输出:id:1,name:张三
    Console.WriteLine("id:{0},name:{1}", id, name);
}
//DataSet_ReadXml();
//DataSet_ReadXml_id();

2.使用Json.Net转换读取

void XmlToJson()
{
    //XmlDocument读取xml文件
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(filePath8);
    //转换为json
    string json = JsonConvert.SerializeXmlNode(xmlDoc);
    //解析json
    JObject jobj = JObject.Parse(json);
    JArray jarr = JArray.Parse(jobj["studentList"]["student"].ToString());
    //输出:id:1,name:张三
    Console.WriteLine("id:{0},name:{1}", jarr[0]["name"]["#text"], jarr[0]["name"]["@id"]);
}
//XmlToJson();

3.使用XmlDocument读取

void XmlDocument_Load()
{
    //XmlDocument读取xml文件
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(filePath8);

    //获取xml根节点
    XmlNode xmlRoot = xmlDoc.DocumentElement;
    //根据节点顺序逐步读取
    //读取第一个name节点
    string name = xmlRoot.SelectSingleNode("student/name").InnerText;

    //读取节点的id属性
    string id = xmlRoot.SelectSingleNode("student/name").Attributes["id"].InnerText;
    //输出:id:1,name:张三
    Console.WriteLine("id:{0},name:{1}", id, name);

    //读取所有的name节点
    foreach (XmlNode node in xmlRoot.SelectNodes("student/name"))
    {
        //循环输出
        Console.WriteLine("id:{0},name:{1}", node.Attributes["id"].InnerText, node.InnerText);
    }
}
//XmlDocument_Load();
void XmlDocument_Load2()
{
    //使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.
    XmlDocument doc = new XmlDocument();

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.IgnoreComments = true;//忽略文档里面的注释
    using (XmlReader reader = XmlReader.Create(filePath8, settings))
    {
        doc.Load(reader);
        //doc.Load(@"d:/demo.xml");
        //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码
        // 得到根节点bookstore
        XmlNode xn = doc.SelectSingleNode("studentList");
        // 得到根节点的所有子节点
        XmlNodeList xnl = xn.ChildNodes;
        string info = "\n";
        string info2 = "\n";
        foreach (XmlNode xn1 in xnl)
        {
            
            // 将节点转换为元素,便于得到节点的属性值
            XmlElement xe = (XmlElement)xn1;
            // 得到<student>标签的Type和ISBN两个属性的属性值
            info += "TYPE:" + xe.GetAttribute("Type").ToString();
            info += "  ISBN:" + xe.GetAttribute("ISBN").ToString() + "\n";
            // 得到Book节点的所有子节点
            XmlNodeList xnl0 = xe.ChildNodes;
            info2 += "name:" + xnl0.Item(0).InnerText;
            info2 += "  sex:" + xnl0.Item(1).InnerText;
            info2 += "  old:" + xnl0.Item(2).InnerText + "\n";
        }
        Console.WriteLine(info+info2);
    }
}
//XmlDocument_Load2();

4.使用XmlTextReader读取

#region XmlTextReaderDemo
 void XmlTextReaderDemo()
{
    string info = "\n";
    string info2 = "\n";
    XmlTextReader reader = new XmlTextReader(filePath8);
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        {
            if (reader.Name == "student")
            {
                info += "TYPE:" + reader.GetAttribute("Type");
                info += "  ISBN:" + reader.GetAttribute("ISBN") + "\n";
            }
            if (reader.Name == "name")
            {
                info2 += "name:" + reader.ReadElementContentAsString();
            }
            if (reader.Name == "sex")
            {
                info2 += "  sex:" + reader.ReadElementString().Trim();
            }
            if (reader.Name == "old")
            {
                info2 += "  old:" + reader.ReadElementString().Trim() + "\n";
            }
            //for(int i=0;i<reader.AttributeCount;i++)
            //{
            //  reader.MoveToAttribute(i);
            //}
        }
    }
    reader.Close();
    Console.WriteLine(info + info2);
}
#endregion XmlTextReaderDemo
//XmlTextReaderDemo();

5.使用 Linq to Xml读取

void Linq_To_Xml()
{
    XElement xe = XElement.Load(filePath8);
    //xe.Descendants
    var elements = from ele in xe.Elements()
                   select ele;
    string info = "";
    foreach (var ele in elements)
    {
        info += "name:" + ele.Element("name").Value;
        info += "  old:" + ele.Element("old").Value + "\n";
    }
    Console.WriteLine(info);
}
//Linq_To_Xml();

四、EXCEL文件的读写

参考文章:EXCEL的读取方式

1.以NPOI的方式读写

//NPOI方式
//优点:用户电脑上没有安装office,使用NPOI,依旧可以在它的机器上对word或者excel文档进行读写
//缺点:有的需要下载插件,添加到系统引用中。
//如果需要读写多种Word、Excel等Office文件,OpenXml和NPOI也是不错的选择。
//using NPOI.SS.UserModel;
void Excle_NPOI()
{
    //导入
    IWorkbook workbook = WorkbookFactory.Create(filePath12);
    ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作薄
    sheet.CreateRow(0).CreateCell(0).SetCellValue("A");
    //向第一行第一个单元格写入字符串
    sheet.CreateRow(1).CreateCell(1).SetCellValue(2);
    sheet.CreateRow(2).CreateCell(2).SetCellValue("B");
    IRow row = (IRow)sheet.GetRow(0);//获取第一行
    //设置第一行第一列值,更多方法请参考源官方Demo
    row.CreateCell(4).SetCellValue("Excle_NPOI");//设置第一行第一列值
    //导出excel
    FileStream fs = new FileStream(filePath12, FileMode.Create, FileAccess.ReadWrite);
    workbook.Write(fs);
    fs.Close();
}
Excle_NPOI();

2.以ClosedXML的方式读写

添加相应的NuGet包

//using ClosedXML.Excel;
void Excle_ClosedXml()
{
    var workbook = new XLWorkbook(filePath11);
    IXLWorksheet sheet = workbook.Worksheet(1);//这个库也是从1开始
    //设置第一行第一列值,更多方法请参考官方Demo
    sheet.Cell(1, 5).Value = "Excle_ClosedXml";//该方法也是从1开始,非0
    workbook.SaveAs(filePath12);
}
//Excle_ClosedXml();
//导出不支持覆盖,如果路径12的文件存在则报错?

3.以Spire.Xls的方式读写

//如果需要在WinForm中展示,那么Spire.Office可能是唯一选择。
//Nuget下载Free Spire.xls
void Excle_spire()
{
    Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
    workbook.LoadFromFile(filePath11);
    //处理Excel数据,更多请参考官方Demo
    Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
    sheet.Range[1, 6].Text = "Excle_spire";//该方法也是从1开始,非0
    workbook.SaveToFile(filePath12);
}
//Excle_spire();
//覆盖式导出

4.以EPPlus的方式读写

//如果只是需要读写Excel,那么EPPlus非常方便而且符合使用习惯。
//using OfficeOpenXml;
void TestEPPlus()
{
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//指明非商业应用;EPPlus通过LicenseContext来区分商业应用(Commercial)和非商业应用(NonCommercial)
    ExcelPackage package = new ExcelPackage(filePath12);//加载Excel工作簿
    ExcelWorksheet sheet1 = package.Workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表

    sheet1.Cells[1, 1].Value = "A";//设置单元格内容
    sheet1.Cells[2, 2].Value = "B";
    sheet1.Cells[3, 3].Value = "C";
    //package.Save();//将更改保存到原文件
    package.SaveAs(filePath12);//将更改保存到新的文件,类似于另存为
}
//TestEPPlus();

五、CSV文件的读取

参考博客:CSV文件的读取方式

DataTable CSV2DataTable(string fileName)
{
    try
    {
        DataTable dt = new DataTable();
        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs, Encoding.Default);
        //记录每次读取的一行记录
        string strLine = "";
        //记录每行记录中的各字段内容
        string[] aryLine;
        //标示列数
        int columnCount = 0;
        //标示是否是读取的第一行
        bool IsFirst = true;
        //逐行读取CSV中的数据
        while ((strLine = sr.ReadLine()) != null)
        {
            aryLine = strLine.Replace('"', ' ').Replace(" ", "").TrimEnd(',').Split(',');
            if (IsFirst == true)
            {
                IsFirst = false;
                columnCount = aryLine.Length;
                //创建列
                for (int i = 0; i < columnCount; i++)
                {
                    DataColumn dc = new DataColumn(aryLine[i]);
                    try
                    {
                        dt.Columns.Add(dc);
                    }
                    catch (Exception ex)
                    {
                        return null;
                    }
                }
            }
            else
            {
                DataRow dr = dt.NewRow();
                for (int j = 0; j < columnCount; j++)
                {
                    dr[j] = aryLine[j];
                }
                dt.Rows.Add(dr);
            }
        }
        sr.Close();
        fs.Close();
        return dt;
    }
    catch (Exception)
    {
        return null;
    }
}
//仅能读取简单的CSV
//DataTable dt = CSV2DataTable(filePath9);
//for (int i = 0; dt.Rows.Count<i; i++)
//{
//    Console.Write("");
//}

simple.csv文件示例

Test1,Test2,Test3,Test4,Test5,Test6
s1,s2,s3,s4,s5,s6
r1,r2,r3,r4,r5,r6

以上便是本文的所有内容啦,如有遗漏,欢迎补充!文章来源地址https://www.toymoban.com/news/detail-413171.html

到了这里,关于C#读写各类文件合集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于C#读写文本文件(.txt)的方法

    读写文本文件其实是件很简单的事情,本文主要给大家介绍了关于C#读写文本文件(.txt)的相关资料,需要的朋友可以参考下 读取txt文件 如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(filePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding)的方法。它们都一次性将文本内

    2024年02月15日
    浏览(39)
  • C++ 各类mutex和读写锁性能比较

    pthread_mutex_t: 互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。 pthread_spinlock_t: 自旋锁,同一瞬间也只能有一个线程能够获取锁,不同的是,其他线程在

    2024年02月02日
    浏览(41)
  • 【百套源码】HTML5期末大作业 - 各类网页作业源码合集

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131242976 【百套源码】HTML5期末大作业 - 各类网页作业源码合集 HTML作业源码,源码下载,内含博主整理的附带源码的资源合集,包括个人介绍相关源码,企业官网相关源码(商城,服装,农业,公司官网,食品,

    2024年02月09日
    浏览(88)
  • C# 流Stream详解(1)——读写txt和二进制文件

    【读写txt文件】 电脑手机上有各种各样的文件,例如视频文件、图片文件、文本文件,其中读写txt文件是最简单的,有多种方式, 使用StreamReader和StreamWriter 使用TextReader和TextWriter   使用FileStream 使用File类提供的静态方法 上面几种方法代码都很长,一般来说我们几乎不会使

    2024年02月06日
    浏览(45)
  • 《C#零基础入门之百识百例》(九十六)本地数据交互 -- 读写Excel表格文件

    本文属于 C#零基础入门之百识百例 系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题

    2024年02月08日
    浏览(41)
  • C# 二进制字节流查找函数IndexOf

    /// summary  /// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引。  /// /summary  /// param name=\\\"srcBytes\\\"被执行查找的 System.Byte[]。/param  /// param name=\\\"searchBytes\\\"要查找的 System.Byte[]。/param  /// returns如果找到该字节数组,则为 searchBytes 的索引位置;如果未找到该字节数组,则

    2024年02月13日
    浏览(47)
  • 【OMNET++网络仿真系列学习笔记-1】Ubuntu 22.04版本安装OMNET++6.0版本及各类报错合集解决方案

    本篇文章记录了22.04版本Ubuntu安装OMNET++6.0版本及各类报错合集解决方案,途中遇到了无数问题,很多问题都无法找到解决方案,好在询问了一下实验室研究生师兄,在他的帮助指导下解决了。感谢师兄! 首先,我们进行下载6.0的压缩包。 一般来说,OMNeT++要求设置某些环境变

    2024年02月02日
    浏览(43)
  • 金融时间序列预测方法合集:CNN、LSTM、随机森林、ARMA预测股票价格(适用于时序问题)、相似度计算、各类评判指标绘图(数学建模科研适用)

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域) :汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自

    2024年02月13日
    浏览(43)
  • 正则表达式常用字符及案例

    正则表达式是一种强大而灵活的工具,它在文本搜索和处理中起到了至关重要的作用。熟练掌握正则表达式的常用字符和使用方法,将能帮助开发者更加高效地进行模式匹配和字符串操作。本文将介绍一些常见的正则表达式字符,并给出一些实际案例来进一步理解其应用。

    2024年02月15日
    浏览(45)
  • 字节流及存放本地文件上传和下载文件

    之前的文章有写过 vue+springboot使用文件流实现文件下载 实现如何通过 的形式进行下载文件 但是它对于很多业务场景相对适用性不是很广泛。 以及 elementUI加springboot实现上传excel文件给后端并读取excel 也只能是通过elementui的元素类型进行上传。 因此,本次文章将通过两种方式

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包