首页 > 编程语言 >C#文件操作相关(1)

C#文件操作相关(1)

时间:2024-08-17 10:38:44浏览次数:11  
标签:文件 File C# WriteLine Debug 操作 FileInfo string

今日份主要内容:文件操作相关

  1. 文件相关类:File类,FileInnfo类

  2. 路径类:Path类

  3. 盘符类:DriverInfo类

  4. 目录类:Directory类,DirectoryInfo类

  5. 文件的输入与输出类:FileStream类,MemoryStream类,StreamReader类,StreamWriter类,StringReader类,StringWriter类

常用文件类概述

文件、目录(文件夹)、路径输入及输出常用的类有: File,FileInfo,Directory,DirectoryInfo,Path,DriveInfo。
可查看官方文档:F1或fn+F1

Path类提供对文件路径的相关操作。

DriveInfo类提供对有关驱动器(盘符)的信息的访问。

文件输入或输出流相关类:
FileStream类,MemoryStream类,StreamReader类,StreamWriter类,StringReader类,StringWriter类

本篇文章主要介绍1,2。

File类,FileInnfo类

在 C# 中,File类FileInfo类都用于处理文件操作。

File类提供了一系列的静态方法,用于对文件进行操作,例如创建、删除、移动、复制文件等。这些方法使用起来比较方便直接,但每次调用都会进行一些安全检查和权限验证等操作,可能会有一定的性能开销

FileInfo类则是表示文件的一个实例对象。通过创建FileInfo 对象,可以对特定的文件进行更细致和灵活的操作。它具有一些属性和方法来获取文件的详细信息,并执行一些文件操作。

File类和FileInfo类都是提供用于创建、复制、删除、移动和打开单一文件的方法,并协助创建 FileStream 对象。
File类是静态类。FileInfo类是密封类。FileInfo类和File类的API相似度高,使用比File类灵活。

例如:


using System.IO;

// 使用 File 类创建新文件
File.Create("example.txt");

// 使用 FileInfo 类操作文件
FileInfo fileInfo = new FileInfo("example.txt");
if (!fileInfo.Exists)
{
    fileInfo.Create();
}

文件输入和输出类规律:以Info以尾可以实例化,不带Info的是静态类,如:File是静态类,FileInfo可以实例化。

创建文件


// 1.创建文件
private void button1_Click(object sender, EventArgs e)
{
    // 路径
    string path = @"C: \Users\Administrator\Desktop\C#\输入输出\1.文件操作\"; //这里填写要创建文件的路径,不包括文件名。
    // 文件名
    string fileName = "b.txt";
    // 文件的完整路径
    string fullPath = Path.Combine(path, fileName);

    // 文件流,流要打开,记得关闭。建议使用using子句。流====》计算机中二进制流
    //FileStream fs = File.Create(fullPath, 100, FileOptions.None, new System.Security.AccessControl.FileSecurity()); FileOption枚举值;这是要传一个类,要new一下。

    /*FileStream fs = File.Create(fullPath); //这里Create()返回了一个FileStream 类型的文件。可以设置一个值去接收下这个文件。不想管什么类型的时候,FileStream可以写成var。

    // 创建编码,为了得了字节,向流只能写入字节
    Encoding encoding = Encoding.UTF8;
    Encoding encoding1 = Encoding.GetEncoding("UTF-8");
    byte[] bytes = encoding1.GetBytes("hello file55555");
    fs.Write(bytes, 0, bytes.Length);
    通过编码,让字节数组byte[]转换成字符串。
    // 关闭流,防止忘记
    fs.Close();*/

    // using子句,自动帮开发者关闭流。这个CreatText()返回了一个StreamWrite 的文件类型。
    using (StreamWriter sw = File.CreateText(fullPath))
    {
        // StreamWriter功能比FileStream单一些,但使用方便,可以直接写入字符串,而FileStream要求写入byte[]
        sw.Write("hello");
        sw.Write(" world");
        sw.WriteLine("中文");
    };
}

路径前面加一邮箱符号,可以不用写双斜杠。

  • 怎么找路径?

  • 右键单击项目名字,选择在文件资源管理器中打开文件夹。

  • 文件流打开之后不要忘记关闭,不关闭就一直占用内存。

  • fs.Write(); fs.Close();

重命名文件


// 2.重命名文件
private void button2_Click(object sender, EventArgs e)
{
    // 源文件,即重命名前的文件
    string fileName = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\b.txt";
    // 目标文件,即重命名后的文件
    string newFileName = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\bb.txt";

    // 目标文件存在时,先删除
    if (File.Exists(newFileName))
    {
        // 确保重命名后的文件不存在。
        File.Delete(newFileName);
    }
    // 再通过移动实现重命名
    File.Move(fileName, newFileName);
}

复制文件

 
 // 3.复制文件
 private void button3_Click(object sender, EventArgs e)
 {
     // 源文件,即复制前的文件
     string sourceFileName = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\a.txt";
     // 目标文件,即复制后的文件
     string newFileName = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\a1.txt";

     // Exists()判断文件是否存在,复制文件时,不允许覆盖同名文件,即源文件存在,目标文件不存在。
     if (File.Exists(sourceFileName) && !File.Exists(newFileName))
     {
         // 复制文件时,不允许覆盖同名文件
         File.Copy(sourceFileName, newFileName);
     }
 }

创建并写入文件


// 5.创建并写入文件
private void button5_Click(object sender, EventArgs e)
{
    string filename = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\a2.txt";
    File.WriteAllText(filename, "你好!abc123"); // 创建文件,并写入内容
    File.AppendAllText(filename, "hello world"); // 追加内容,追加和写入不太一样,写入会替换原来的内容。
    // AppendText()也会追加内容,需要引用流来使用。
    using (var sw = File.AppendText(filename))
    {
        sw.WriteLine("HELLO WORLD1");
        sw.WriteLine("HELLO WORLD2");
    };
}

打开文件,读取文件


private void button6_Click(object sender, EventArgs e)
{
    // 打开的文件路径
    string filename = @"C:\Users\Administrator\Desktop\C#\输入输出\1.文件操作\a2.txt";
    // 打开方式:Open只打开,文件权限:Read,Write,ReadWrite
    using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.ReadWrite))
    {
        // 知道读取的字节数  1024不准确。fs.Length流中字节数
        byte[] bytes = new byte[fs.Length];
        // 把流中的内容读取byte[]中。Read()在读取大量内容,会阻塞。大量内容读取,建议使用ReadAsync()
        int count = fs.Read(bytes, 0, bytes.Length);
        // 把byte[]转换成字符串,才真正拿到内容。
        string result = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
        richTextBox1.Text = result;
    };
}

  • 写异步的时候,建议使用Async结尾的方法,好处不阻塞。

  • 也可以用begin,end,但这种方法比较古老,不建议使用。

选择文件


private void button7_Click(object sender, EventArgs e)
{
    DialogResult dialogResult = openFileDialog1.ShowDialog();
    if (dialogResult == DialogResult.OK) // 选择文件
    {
        string fileName = openFileDialog1.FileName;
        Debug.WriteLine(fileName);
        // ReadAllText()读取所有的文本,返回字符串,也会阻塞。
        //string content = File.ReadAllText(fileName);
        //richTextBox1.Text = content;

        // File静态文件类,FileInfo实例文件类
        FileInfo file = new FileInfo(fileName);
        Debug.WriteLine(file.FullName);
        Debug.WriteLine(file.Name);
        // 文件创建时间
        Debug.WriteLine(file.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"));
        // 文件修改时间
        Debug.WriteLine(file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"));
        // 文件最后一次访问时间
        Debug.WriteLine(file.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss"));

        // 文件的后缀名:.txt    媒体类型:https://www.runoob.com/http/mime-types.html
        //媒体类型MIME 文件后缀名 .txt 扩展名Extension
        Debug.WriteLine(file.Extension);
        Debug.WriteLine(Path.GetFileName(fileName));
        Debug.WriteLine(Path.GetFileNameWithoutExtension(fileName));
        Debug.WriteLine(Path.GetExtension(fileName));

        Debug.WriteLine(file.Attributes.ToString().Trim());
        // 拿文件类型
        if (file.Extension == ".txt")
        {
            Debug.WriteLine("文本文件");
        }

        // 文件大小
        Debug.WriteLine(Math.Ceiling(file.Length / 1024M).ToString("N0"));
    }
}

File类常用API

追加文本:AppendText(),AppendAllLines(),AppendAllText()
复制文件:Copy()
创建文件:Create(),CreateText()
删除文件:Delete()
移动文件:Move()
打开文件:Open(),OpenRead(),OpenText(),OpenWrite()
替换文件:Replace()
读取文件:ReadAllBytes(),ReadAllLines(),ReadAllText(),ReadLines()
写入文件:WriteAllBytes(),WriteAllLines(),WriteAllText()
判断文件是否存在:Exists()
加密及解密:Encrypt(),Decrypt()

读写文件:

  1. 需要流(最常用FileStram,也有可能是其他的流,如:StreamWriter等)
  2. 需要操作流的API(读写的API)
  3. 不要忘记关闭流。

标签:文件,File,C#,WriteLine,Debug,操作,FileInfo,string
From: https://www.cnblogs.com/dbsdb/p/18364110

相关文章

  • TypeScript 面试题汇总
    引言TypeScript是一种由微软开发的开源、跨平台的编程语言,它是JavaScript的超集,为JavaScript添加了静态类型系统和其他高级功能。随着TypeScript在前端开发领域的广泛应用,掌握TypeScript已经成为很多开发者必备的技能之一。本文将整理一系列常见的TypeScript面试题......
  • CF1503E 2-Coloring
    CF1503E2-Coloringcjx组合强。思路观察一下题目,不难发现只有当黄色形成如下的单峰时才合法。(染错色了,将就一下)其中两座峰的峰顶高度相加等于\(m\),为了方便统计,我们钦定右边的峰一定在左峰下方的行出现,最后答案乘以二就是最终方案。发现对于每一边是两个最长不下降子序列......
  • 【漏洞复现】某某康达vpn list_base_config 远程命令执行漏洞
               声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。一、漏洞描述网络设备是确保计算机网络顺畅运行的关键硬件组件,主要包括路由器、交换机、网桥、网卡、集线器、防火墙、......
  • LookupError: Resource averaged_perceptron_tagger not found.解决方案
      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学......
  • 适配iOS18 Widget Extension控制中心新功能:ControlWidgetToggle和ControlWidgetButton
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!支持原创,博客园原文链接:https://www.cnblogs.com/strengthen/p/18362397文末可以有demo下载。首先查看WWDC2024的官方视频:WWDC2024将App控件扩展到系统级别:https://developer.apple......
  • 安装pycharm
    ‌PyCharm是一种‌Python集成开发环境(‌IDE)这里安装pycharm专业版(破解版本)参考链接:https://mp.weixin.qq.com/s/fJbwZ1kKJ43xUWkt2ny5uA1.以管理员身份运行安装包正常安装即可2.激活安装好后打开软件:将“jetbra”文件夹复制到pycharm的安装目录中(......
  • 全新AutoCAD安装包+CAD2025软件安装视频教程+全套构图插件+部署说明文档下载
    CAD软件是工程师、产品设计师和任何希望将设计变为现实的熟练专业人士的必备工具。也许您刚刚开始CAD设计,不想做出财务承诺,或者您是一位专业人士,需要全天候解决一些设计问题,或者您可能需要足够熟悉特定的CAD程序获得这份出色的设计工作。无论如何,幸运的是,对于专业和业......
  • TCP/UDP网络聊天室
        本博客仅对网络聊天室项目进行分享,仅供学习讨论使用,欢迎大家讨论。UDP网络聊天室项目要求        利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件,服务器也可以自己发送通知给所有客户端。  ......
  • 如何确保PCDN的稳定性?
    确保PCDN的稳定性需要从多个方面入手,以下是一些关键的策略和方法:1.节点选择和优化:在PCDN中,节点的选择和优化对于稳定性至关重要。应确保节点具有足够的带宽和性能,并且可以通过动态调整节点权重来平衡负载,避免单点故障。此外,节点的地理位置分布也需要考虑,以确保在不同地区的......
  • C++类和对象(中)
    前言:我们学习了类和对象的上部分,对类和对象有了一些认识,接下来了解类和对象的中间部分,构造函数,析构函数,拷贝构造,赋值构造这部分也比较重要,我们需要牢牢掌握,一起加油吧!1.类的默认成员函数默认成员函数就是我们不用写系统自动生成的函数,我们不写的情况下编译器会默认生成6......