美文网首页
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#操作FTP总结

    本文是对FTP相关操作,例如新建/删除目录、新建/删除文件、获取文件/目录列表等的总结,方便日后调用。 其实C#操...

  • linux文件和目录操作

    文件目录操作 cp 复制 rm 移除文件或目录 mv 移动文件与目录,或更名

  • 文件与目录操作

    数据的存取方式数据库存取-->适合大量、且关系复杂并有序的数据存取文件存取-->适合大量、数据关系简单的数据存取,...

  • 文件与目录操作

    文件,就是存储在某种长期储存设备上的一段数据,长期存储设备包括:硬盘、U 盘、移动硬盘、光盘等在计算机中,文件是以...

  • 文件与流-1

    文件与流 持久化操作:(文件里、数据库里)Java.io 文件分隔符 目录操作 文件操作

  • Golang os包与设置配置文件路径

    一、os包的学习与使用(文件,目录,进程的操作) 参考golang语言中os包的学习与使用(文件,目录,进程的操作...

  • 文件和目录处理相关

    文件和目录处理相关 题: 考点:文件操作/写入操作; 延伸:目录操作函数,其他文件操作; 文件读写操作 文件系统函...

  • LInux学习笔记2-文件与目录的操作

    进行文件与目录的操作时,常用的命令包括: mkdir: 创建目录。 rm: 移除文件和目录。 cp: 复制文件和目...

  • Mac终端常用的基本命令

    目录操作: 文件操作: 选择操作: 进程操作: 时间操作: 网络与通信操作: Korn Shell 命令 : 其他...

  • lua简介

    C#与Lua的区别:(C#需要编译而lua不需要)C#只能在特定的操作系统中进行编译成dll文件,然后打包进安装包...

网友评论

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

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