美文网首页
C#文件与目录操作

C#文件与目录操作

作者: 小羊爱学习 | 来源:发表于2024-05-27 16:02 被阅读0次

    在C#中,可以使用System.IO命名空间下的类来保存文件

    一:文本写入和读取 StreamWriter、StreamReader

     private void test1()
     {
         // [1] 创建文件流(如果已存在文件则覆盖)
         FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Create);
         // [2] 创建写入器
         StreamWriter sw = new StreamWriter(fs);
         // [3] 以流的方式写入数据
         sw.Write("我是写入内容");
         //sw.WriteLine("我是写入内容");
         // [4] 关闭写入器
         sw.Close();
         // [5] 关闭文件流
         fs.Close();
     }
    
     // 读取文件
     private void test2()
     {
         // [1] 创建文件流(如果已存在文件则覆盖)
         FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Open);
         // [2] 创建读取器
         //StreamReader sr = new StreamReader(fs,Encoding.Default);//加编码
         StreamReader sr = new StreamReader(fs);
         // [3] 以流的方式读取数据
         string str = sr.ReadToEnd();
         Console.WriteLine(str);
         // [4] 关闭读取器
         sr.Close();
         // [5] 关闭文件流
         fs.Close();
     }
    
     // 写入日志类型
     private void test3()
     {
         // [1] 创建文件流(如果已存在文件则覆盖)
         FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Append);
         // [2] 创建写入器
         StreamWriter sw = new StreamWriter(fs);
         // [3] 以流的方式"逐步写入"数据
         sw.WriteLine(DateTime.Now.ToString() + "[文件操作正常!]");
         // [4] 关闭写入器
         sw.Close();
         // [5] 关闭文件流
         fs.Close();
     }
     // 对象写入
     private void test11()
     {
    
         Student student = new Student();
         student.Name = "Test";
         student.Age = 1;
    
         FileStream fs = new FileStream("student.obj", FileMode.Create);// 可以写相对路径(默认程序debug下或release中)
         StreamWriter sw = new StreamWriter(fs);
         sw.WriteLine(student.Name);
         sw.WriteLine(student.Age);
         sw.Close();
         fs.Close();
     }
    
     // 对象读取
     private void test12()
     {
         FileStream fs = new FileStream("student.obj", FileMode.Open);
         StreamReader sr = new StreamReader(fs);
         Student student = new Student()
         {
             Name = sr.ReadLine(),
             Age = Convert.ToInt32((string)sr.ReadLine())
         };
         sr.Close();
         fs.Close();
     }
    

    StreamWriter和StreamReader的重载方式有很多种,可以不用Filestream,直接传入一个物理地址,具体可以进入官网或反编译查询。sw.Write和sr.ReadToEnd()时一次性写入全部或读取全部sw.WriteLine和sr.ReadLine()是一次写入或读取一行。

    二:文件操作 File

     // 删除文件
     private void test4()
     {
         File.Delete("D:\\myfile\\myfile.txt");
     }
    
     // 赋值文件
     private void test5()
     {
         // 判断目标文件夹文件是否存在
         if (File.Exists("D:\\myfile2\\myfile.txt"))
         {
             File.Delete("D:\\myfile2\\myfile.txt");
         }
         File.Copy("D:\\myfile\\myfile.txt", "D:\\myfile2\\myfile.txt");
     }
    
     // 移动文件
     private void test6()
     {
         if (File.Exists("D:\\myfile2\\myfile.txt"))
         {
             File.Delete("D:\\myfile2\\myfile.txt");
         }
    
         if (File.Exists("D:\\myfile\\myfile.txt"))
         {
             File.Move("D:\\myfile\\myfile.txt", "D:\\myfile2\\myfile.txt");
         }
         else
         {
             Console.WriteLine("文件不存在");
         }
     }
    

    三:目录操作 Directory

    // 获取目录下的所有文件
    private void test7()
    {
        string[] files = Directory.GetFiles("D:\\myfile");
    }
    
    //获取目录下的所有字目录
    private void test8()
    {
        string[] dirs = Directory.GetDirectories("D:\\myfile");
    }
    
    // 创建目录
    private void test9()
    {
        Directory.CreateDirectory("D:\\myfile");
    }
    
    // 删除目录
    private void test10()
    {
        //Directory.Delete("D:\\myfile"); // 要求目录必须为空(不能有文件)
    
        //使用DirectoryInfo对象,可以删除不为空的目录
        DirectoryInfo dir = new DirectoryInfo("D:\\myfile");
        dir.Delete(true);
    
    }
    

    四:文本写入和读取(二进制格式) BinaryWriter、BinaryReader

     // 写入二进制文件
     private void test15()
     {
         string filePath = "binary_output.dat";
         try
         {
             using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(filePath)))
             {
                 int intValue = 42;
                 double doubleValue = 3.14159;
    
                 writer.Write(intValue);
                 writer.Write(doubleValue);
             }
    
             Console.WriteLine("二进制文件写入成功:" + filePath);
         }
         catch (Exception ex)
         {
             Console.WriteLine("发生异常:" + ex.Message);
         }
     }
     // 读取二进制文件
     private void test16()
     {
         string filePath = "binary.dat";
         try
         {
             using (BinaryReader reader = new BinaryReader(File.OpenRead(filePath)))
             {
                 int intValue = reader.ReadInt32();
                 double doubleValue = reader.ReadDouble();
    
                 Console.WriteLine("整数值:" + intValue);
                 Console.WriteLine("双精度值:" + doubleValue);
             }
         }
         catch (FileNotFoundException)
         {
             Console.WriteLine("文件不存在:" + filePath);
         }
         catch (Exception ex)
         {
             Console.WriteLine("发生异常:" + ex.Message);
         }
     }
    

    五:序列化和反序列化(二进制格式) BinaryFormatter

    // 保存对象
    private void test13()
    {
        Student student = new Student();
        student.Name = "Test";
        student.Age = 1;
    
        // 创建文件流
        FileStream fs = new FileStream("student.stu", FileMode.Create);// 可以写相对路径(默认程序debug下或release中)
        // 创建二进制格式化器
        BinaryFormatter formatter = new BinaryFormatter();
        try
        {
            // 调用序列化方法
            formatter.Serialize(fs, student);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        // 关闭文件流
        fs.Close();
        fs.Dispose();
        //finally
        //{
        //    if (fs != null)
        //    {
        //        fs.Close();
        //        fs.Dispose();
        //    }
        //}
    
    }
    // 读取对象
    private Student test14()
    {
        // 创建文件流
        FileStream fs = new FileStream("student.stu", FileMode.Open);// 可以写相对路径(默认程序debug下或release中)
        // 创建二进制格式化器
        BinaryFormatter formatter = new BinaryFormatter();
        // 调用反序列化方法
        Student student;
        try
        {
            student = (Student)formatter.Deserialize(fs);
            return student;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"{ex.Message}");
        }
        finally
        {
            if (fs != null)
            {
                fs.Close();
                fs.Dispose();
            }
        }
    
        //return default(Student);
        return default;
        //return new Student();
    }
    

    六:XML方式

    // 读取XML文件
    private void test17()
    {
        //【1】创建XML文档操作对象
        XmlDocument objDoc = new XmlDocument();
        //【2】加载XML文件到文档对象中
        objDoc.Load("StuScore.xml");
        //【3】获取XML文档根目录
        XmlNode rootNode = objDoc.DocumentElement;
        List<Student> list = new List<Student>();//创建对象集合
        //【4】遍历根节点(根节点包含左右节点)
        foreach (XmlNode stuNode in rootNode.ChildNodes)
        {
            if (stuNode.Name == "Student")
            {
                Student objStu = new Student();
                //【5】遍历子节点
                foreach (XmlNode subNode in stuNode)
                {
                    switch (subNode.Name)
                    {
                        case "StuName":
                            objStu.Name = subNode.InnerText;
                            break;
                        case "StuAge":
                            objStu.Age = Convert.ToInt32(subNode.InnerText);
                            break;
                    }
                }
                list.Add(objStu);
            }
        }
        Console.WriteLine(list);
    
    }
    
    // XML XmlReader读取器
    private void test18()
    {
        XmlReader reader = XmlReader.Create("StuScore.xml");
        while (reader.Read())
        {
            if (reader.Name == "Version")
            {
                Console.WriteLine(reader.GetAttribute("vNo") + reader.GetAttribute("pTime"));
                break;
            }
        }
    }
    
    // XML写入
    private void test19()
    {
        XmlDocument doc = new XmlDocument();
    
        // 创建XML声明
        XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
        doc.AppendChild(xmlDeclaration);
    
        // 创建一个根元素
        XmlElement rootElement = doc.CreateElement("", "root", "");
        doc.AppendChild(rootElement);
    
        // 创建子元素
        XmlElement childElement = doc.CreateElement("", "child", "");
        childElement.SetAttribute("attribute", "value");
        childElement.InnerText = "Text Content";
        rootElement.AppendChild(childElement);
    
        // 保存到文件
        doc.Save("output.xml");
    }
    

    相关文章

      网友评论

          本文标题:C#文件与目录操作

          本文链接:https://www.haomeiwen.com/subject/dpbtqjtx.html