首页 > 编程语言 >C# 文件操作

C# 文件操作

时间:2024-07-30 16:07:41浏览次数:8  
标签:文件 Rows C# void EventArgs dataGridView1 操作 new data

本篇主要记录C#操作文件

相对路径在项目文件...\bin\Debug 目录下

一、写入读取文件

写入
        /// <summary>
        /// initial 文件写入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button1_Click(object sender, EventArgs e)
        {
            //1.创建一个键值对
            Dictionary<String, Dictionary<string, string>> data = new Dictionary<string, Dictionary<string, string>>();
            //2.添加数据源
            data.Add("设备套接字", new Dictionary<string, string>()
            {
                {"ip","192.168.21.11" },
                {"端口","502" }
            });
            //3.写入到本地
            using (StreamWriter streamWriter = new StreamWriter(path,true))
            {
                //4.循环写入
                foreach (string item in data.Keys)
                {
                    //4.1写入键
                    streamWriter.WriteLine($"[{item}]");
                    //5.写入值
                    foreach (string item2 in data[item].Keys)
                    {
                        streamWriter.WriteLine($"{item2}={data[item][item2]}");
                    }

                }
            }
            
        }
      
读取
        /// <summary>
        /// initial 文件读取
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button2_Click(object sender, EventArgs e)
        {
            Dictionary<String, Dictionary<string, string>> saveData = new Dictionary<string, Dictionary<string, string>>();
            string key = null;

            //配置io流
            using (StreamReader reader = new StreamReader(path,true))
            {
                while (!reader.EndOfStream)
                {
                    //读取
                    string data = reader.ReadLine();
                    //判断是否键
                    if (data.StartsWith("[") && data.EndsWith("]"))
                    {
                        key = data.Substring(1, data.Length - 2);
                        saveData.Add(key,new Dictionary<string, string>());
                    }
                    //判断是否是值
                    else if (!string.IsNullOrEmpty(data) && !data.EndsWith(";"))
                    {
                        int index = data.IndexOf("=");
                        if (index > 0)
                        {
                            //获取值
                            saveData[key].Add(data.Substring(0,index), data.Substring(index+1));
                        }
                    }
                   
                }
               
            }
        }

二、文件的基本操作

目录操作
        /// <summary>
        /// 创建目录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button1_Click(object sender, System.EventArgs e)
        {
            //###一.创建文件夹两种路径方式
            //1.相对路径地址,项目输出路径,在../bin/Debug目录下
            Directory.CreateDirectory("log");
            //在创建的目录中创建子目录
            Directory.CreateDirectory("log/zhangsan");

            //2.绝对路径地址,加磁盘符
            //Directory.CreateDirectory("D:\\c#\\source\\test");


            // ###2.判断指定路径下是否有该目录
            if (Directory.Exists("log"))
            {
                MessageBox.Show("存在");
            }

        }

        /// <summary>
        /// 删除目录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button2_Click(object sender, System.EventArgs e)
        {
            //删除目录,删除的目录必须为空,见构造方法
            Directory.Delete("log/zhangsan",true);
           
            MessageBox.Show(Directory.Exists("log")?"删除成功":"删除失败");
            
        }

        /// <summary>
        /// 查询子文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button3_Click(object sender, System.EventArgs e)
        {
            //查询目录下的文件,不是文件夹,文件是带后缀名的,例如:111.txt
            string[] files = Directory.GetFiles("log");
            foreach (var item in files)
            {
                MessageBox.Show(item);
            }
        }

 

文件流
 // FileStream: 文件流

        Encoding encoding = Encoding.UTF8;//二进制转换格式
        /// <summary>
        /// 写入文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button4_Click(object sender, System.EventArgs e)
        {
            //第一步:配置文件操作对象
            string path = "opreationLog.txt";
            FileMode fileMode = FileMode.Append;
            FileAccess fileAccess = FileAccess.Write;

            //初始化IO流对象
            FileStream fileStream = new FileStream(path, fileMode, fileAccess);

            //第二步:写入
            //TODO: 注意这里要加入 \r 才能识别保存换行
            byte[] data = encoding.GetBytes($"{textBox1.Text}\r\n");
            fileStream.Write(data,0,data.Length);

            //关闭IO流
            fileStream.Close();

        }

        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button5_Click(object sender, System.EventArgs e)
        {
            //第一步:配置文件操作对象
            string path = "opreationLog.txt";
            FileMode fileMode = FileMode.Open;
            FileAccess fileAccess = FileAccess.Read;

            //初始化IO流对象
            FileStream fileStream = new FileStream(path, fileMode, fileAccess);

            byte[] readBytes = new byte[1024];
            fileStream.Read(readBytes, 0, 1024);
            textBox2.Text = encoding.GetString(readBytes);

            //关闭IO流
            fileStream.Close();
        }

 

序列化
        /// <summary>
        /// 序列化导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button6_Click(object sender, System.EventArgs e)
        {
            //第一步:配置文件操作对象
            string path = "save_person.txt";
            FileMode fileMode = FileMode.Create;
            FileAccess fileAccess = FileAccess.Write;

            // 第二步:配置io流对象
            //using自动管理关闭文件流
            using (FileStream fileStream = new FileStream(path, fileMode, fileAccess))
            {
                //创建序列化对象
                BinaryFormatter binary = new BinaryFormatter();
                //获取表格中的数据
                List<Person> persons = new List<Person>();
                Person person;
                for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
                {
                    person = new Person();
                    person.Id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value); 
                    person.Name = dataGridView1.Rows[i].Cells[1].Value.ToString(); 
                    person.Age = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value); 
                    persons.Add(person);
                }
                //开始序列化
                binary.Serialize(fileStream,persons);
            }
        }

        /// <summary>
        /// 序列化导入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button7_Click(object sender, EventArgs e)
        {
            //第一步:配置文件操作对象
            string path = "save_person.txt";
            FileMode fileMode = FileMode.Open;
            FileAccess fileAccess = FileAccess.Read;

            // 第二步:配置io流对象
            //using自动管理关闭文件流
            using (FileStream fileStream = new FileStream(path, fileMode, fileAccess))
            {
                //创建序列化对象
                BinaryFormatter binary = new BinaryFormatter();
                //反序列化
                Object obj = binary.Deserialize(fileStream);
                //转换成集合
                List<Person> people = (List<Person>)obj;
                //清理表格上的数据
                dataGridView1.Rows.Clear();
                //循环写入
                foreach (var item in people)
                {
                    dataGridView1.Rows.Add(item.Id, item.Name, item.Age);
                }


            }
        }
    }

    [Serializable]
    class Person
    {
    }

 

三、CSV文件

        /// <summary>
        /// 导入CSV
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button2_Click(object sender, EventArgs e)
        {
            //第一步:配置IO流操作对象
            using (StreamReader streamReader = new StreamReader("产品数据.csv"))
            {
                int index = 0;

                while(!streamReader.EndOfStream)
                {
                    string data = streamReader.ReadLine();
                    string[] str = data.Split(',');
                    //不插入表头
                    if (index > 0)
                    {
                        dataGridView1.Rows.Add(str);
                    }
                    index++;
                }
                

            }
        }

        /// <summary>
        /// 导出CSV
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button1_Click(object sender, EventArgs e)
        {
            //第一步:配置文件流操作对象
            using(StreamWriter streamWrite = new StreamWriter("产品数据.csv",false))
            {
                //加入表头
                streamWrite.WriteLine($"{dataGridView1.Columns[0].HeaderText},{dataGridView1.Columns[1].HeaderText},{dataGridView1.Columns[2].HeaderText}");
                //第二步:循环写入
                for (int i = 0; i < dataGridView1.Rows.Count -1; i++)
                {
                    streamWrite.WriteLine($"{dataGridView1.Rows[i].Cells[0].Value},{dataGridView1.Rows[i].Cells[1].Value},{dataGridView1.Rows[i].Cells[2].Value}");
                }
             
            }
        }

 

四、Excel

       /// <summary>
        /// 导出excel文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button4_Click(object sender, EventArgs e)
        {
            //第一步:配置Excel文件操作对象
            using (XLWorkbook xl = new XLWorkbook())
            {
                //第二步:创建工作页
                IXLWorksheet sheet = xl.AddWorksheet("产品数据页1");
                //第三步:循环添加数据

                //写入表头
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                {
                    //注意Cell 必须从1开始,否则报错
                    sheet.Cell(1, i + 1).Value = dataGridView1.Columns[i].HeaderText;
                }

                //写入表格数据
                for (int i = 0; i < dataGridView2.Rows.Count-1; i++)
                {
                    //第四步:获取第i行列的值
                    for (int j = 0; j < dataGridView2.Rows[i].Cells.Count; j++)
                    {
                        //第五步:写入数据
                        sheet.Cell(i+2,j+1).Value = dataGridView2.Rows[i].Cells[j].Value.ToString();
                    }
                }
                //第六步:保存到本地
                xl.SaveAs("数据.xlsx");
            }
        }

        /// <summary>
        /// 导入Excel文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button3_Click(object sender, EventArgs e)
        {
            //第一步:配置Excel文件操作对象
            using (XLWorkbook xl = new XLWorkbook("数据.xlsx"))
            {
                //第二步:获取第一个sheet页
                IXLWorksheet workbook = xl.Worksheet(1);
                //第三步:获取sheet页中数据
                IXLRow row;
                List<string> list;
                // 从2开始不要表头
                for (int i = 2; i <= workbook.Rows().Count(); i++)
                {
                    row = workbook.Row(i);
                    list = new List<string>();
                    for (int j = 1; j <= row.Cells().Count(); j++)
                    {
                        string data = workbook.Cell(i, j).Value.ToString();
                        list.Add(data);
                    }

                    dataGridView2.Rows.Add(list);
                }
            }
        }

 

标签:文件,Rows,C#,void,EventArgs,dataGridView1,操作,new,data
From: https://www.cnblogs.com/zeussbook/p/18332682

相关文章

  • OpenCV实现图搜图简单案例
    一、概述使用OpenCV实现一个简单的图搜索的小功能特点:暴力匹配实现原理:1.将图片集合生成特征描述,并存入文件2.加载目标图像,并生成图像特征描述3.加载图像特征描述文件列表4.图像特征描述和集合中的特征描述列表进行匹配......
  • Android9.0 Activity启动流程分析(三)
    文章目录   1、Android屏幕层级       1.1、Window和PhoneWindow的概念       1.2、View和ViewRootImpl的概念   2、ClientLiftCycleManager   3、handleLaunchActivity       3.1、CreatActivity       3.2、setContentView   4......
  • 从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分
    原文链接:从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类教程https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247610610&idx=5&sn=f973c3e430c89d6123ca8f4892086c55&chksm=fa827115cdf5f8036ef8111c6f06cf592a8c0587......
  • Scrapy 爬取旅游景点相关数据(六):代理使用
    本期内容:(1)继续完善评论数据的爬取(2)代理的使用1创建数据库表上期我们只打印了爬取到的数据,并没有入库,保存到数据,先执行以下SQL:CREATETABLEtb_comment(idINTAUTO_INCREMENTPRIMARYKEYCOMMENT'自增主键',tidVARCHAR(255)COMMENT'景点ID',......
  • Bitwig Studio for Mac(音乐创作软件)v5.2版
    bitwigstudiomac中的每个设备都是使用应用程序中集成的模块化系统内部设计的。我们选择的设备展示了BitwigStudio的引擎盖下隐藏的力量。这种广泛的设备将涵盖从微妙到极端的所有声音设计需求。BitwigStudioforMac(音乐创作软件)v5.2激活版软件地址BitwigStudiofo......
  • Exhaust Aftertreatment Diagnosis for Cummins Diesel Engines
    ToperformexhaustaftertreatmentdiagnosisonCumminsenginesusingCumminsInsite,youwillneedtousespecializedsoftwaretodiagnoseandtroubleshootissuesrelatedtotheexhaustaftertreatmentsystem.Theexhaustaftertreatmentsystemincludescom......
  • ADUM4146BRWZ-RL驱动SIC的功耗计算
    通常的算法是将SiCMOSFET的栅极可以粗略地模拟为电容负载。但由于米勒电容和其他的非线性,因而把其电容负载的值等效于5倍输入SICMOS的Ciss,因而驱动的功耗近似为:PDISS​=CEST​×(VDD2​−VSS2​)2×fS​其中:CEST​ 是估算的电容值,等于SiCMOSFET的输入电容 CISS​ 乘以5......
  • 阿里云设置跨域规则后调用OSS时仍然报No'Access-Control-Allow-Origin'的错误原因和解
    问题描述为了实现跨域访问,保证跨域数据传输的安全进行,在OSS控制台设置了跨域CORS规则后,通过SDK进行程序调用时报以下错误。No'Access-Control-Allow-Origin'headerispresentontherequestedresource问题原因出现跨域问题的原因如下:跨域CORS规则设置异常:未正确设......
  • 使用Seata XA模式的全局事务管理在SpringCloud电商订单系统中的应用
    在开发电商系统的过程中,订单创建是一项非常关键的功能。本文将介绍如何在订单创建过程中,结合SpringCloud和Seata的XA模式来实现全局事务管理,以确保数据的一致性和完整性。订单创建过程详解在这段代码中,我们通过@GlobalTransactional注解来声明一个全局事务。以下是具体的......
  • Ocelot网关(一)
    Ocelot是一个开源的.NETCore中间件,专门用于管理APIGateway,提供了路由、请求过滤、请求转发等功能。为了让这个概念更加生动和易于理解,我们可以使用一个比喻来说明APIGateway的作用以及Ocelot的功能。比喻介绍想象一下,APIGateway就像一个大型购物中心的前台(或服务台......