zoukankan      html  css  js  c++  java
  • (32)C#文件读写

    一、File 类

    这是一个静态类,提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建 FileStream 对象

    using System.IO;

    没有构造函数和属性

     写入数据

    1.WriteAllText(String, String)   创建一个新文件,向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件。

    文件的数据会全部覆盖

                string a = @"G:Na.txt"; 
                File.WriteAllText(a,"abc");

     2.WriteAllText(String, String, Encoding) 创建一个新文件,使用指定编码向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件。

     3.AppendAllText(String, String)  打开一个文件,向其中追加指定的字符串,然后关闭该文件。 如果文件不存在,此方法将创建一个文件,将指定的字符串写入文件,然后关闭该文件。

    紧接着数据后加字符串,不会换行。

    读取数据

    1.

    //打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件
    //参数2可无(自动检测根据字节顺序标记存在的文件的编码)
    string str= File.ReadAllText(@"D:a.txt", Encoding.UTF8);

    2.

     复制

     1.Copy(String, String)  将现有文件复制到新文件。 不允许覆盖同名的文件。

    string a = @"G:a.txt";
    string c = @"G:Mc.txt";
    File.Copy(a,c);

    第一个参数是原文件,第二个参数是新生成的文件。路径必须是真实有效的,不会自动创建不存在的路径

    如果参数二的路径下已存在同名文件,则它会提示该路径下已有文件不允许重新创建

    2.Copy(String, String, Boolean) 将现有文件复制到新文件。 允许覆盖同名的文件。

    第三个参数true时可以覆盖新文件,否则为flase

    3.Create(String) 在指定路径中创建或覆盖文件。

     string a = @"G:a.txt";
     File.Create(a);

    在该路径下创建一个空文件,以前的文件覆盖后变空

     删除

     Delete(String) 删除指定的文件。

      string a = @"G:a.txt";
      File.Delete(a);

     移动

    Move(String, String)  将指定文件移到新位置,提供要指定新文件名的选项。

                string c = @"G:Mc.txt";
                string a = @"G:Na.txt";
                File.Move(c, a);

    把参数一移动到参数二并重命名, 不能覆盖目标文件

    判断文件存在

    Exists(String) 确定指定的文件是否存在。返回一个布尔值

     string a = @"G:a.txt";
     if (File.Exists(a))
       Console.WriteLine("文件已存在");     
     else 
       Console.WriteLine("文件不存在");
     Console.ReadLine();

    文件日期更改

    SetCreationTime(String, DateTime) 设置创建该文件的日期和时间。

                string c = @"G:Mc.txt";
                string a = @"G:Na.txt"; 
                DateTime dt = DateTime.Now;
                File.SetCreationTime(a,dt);

     SetLastAccessTime(String, DateTime)  设置上次访问指定文件的日期和时间。

     SetLastWriteTime(String, DateTime) 设置上次写入指定文件的日期和时间。(修改时间)

     

    判断使用静态的File类还是FileInfo类:
    1、如果应用程序在文件上执行几种操作,则使用FileInfo类更好一些,因为创建对象时,已经引用了正确的文件,而静态类每次都要寻找文件,会花费更多时间。
    2、如果进行单一的方法调用,则建议用File类,不必实例化对象。

     

    二、FileStream 类

    1.流

    流的概念:流是一个用于传输数据的对象。

    如果数据从外部源传输到程序中,就是读取流。如果数据从程序传输到外部源中,就是写入流。

    外部源有可能是网络上的数据,或内存区域等。System.Net.Sockets.NetworkStream对象处理网络数据,System.IO.MemoryStream对象用来读取内存。

    使用独立的流对象传输数据比使用FileInfo类等更好,把传输数据的概念与特定数据源分离开,可以更容易交换数据源,更容易实现不同环境下代码的重用

    读写文件最常用的类

    FileStream(文件流):主要用于在二进制文件中读写二进制数据,也可以用它读写任何数据。

    StreamReader(流读取器)和StreamWriter(流写入器)-这两类专门用于读写文本文件。

    BinaryReader和BinarReader这两类本身并不实现流,但能够提供其他流对象的包装器。

    2.缓存的流

    3.FileStream类

    为文件提供 Stream,既支持同步读写操作,也支持异步读写操作。

    构造方法

    FileStream(String, FileMode)        使用指定的路径和创建模式初始化 FileStream 类的新实例

     FileStream(String, FileMode, FileAccess)  使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例

    FileStream fs = new FileStream(file_name, FileMode.OpenOrCreate, FileAccess.Read);

    FileMode枚举类

    FileMode枚举是一个简单枚举,用于指定操作系统打开文件的方式。

    枚举成员    

    CreateNew    指定操作系统应创建新文件,如果文件存在则引发异常。

    Create      指定操作系统创建新文件,如果文件已存在则覆盖之。

    Open        指定 操作系统应打开现有文件,如果文件不存在则抛出异常。

    OpenOrCreate  指定操作系统应打开文件,如果文件不存在则创建之。

    Truncate      指定操作系统打开现有文件,如果文件已存在则清空,从Truncate打开的文件中读取将引发异常。

    Append      若文件存在,则找到文件并找到文件结尾,或者创建一个新文件。

    FileAccess 枚举

    FileAccess用于控制对文件的读访问、写访问或读/写访问的常熟

    枚举成员        

    Read      对文件的读访问,拥有读取权限。

    Write       对文件的写访问,拥有写入权限。

    ReadWrite    对文件的读访问和写访问,拥有读取和写入权限。

    属性

    Length  获取用字节表示的流长度

    byte[] myByteArray = new byte[fs.Length]; //创建一个长度为fs.Length的byte数组,并且其中每个byte的值为0

    方法

    Read(Byte[], Int32, Int32)   从流中读取字节块并将该数据写入给定缓冲区中。

    fs.Read(myByteArray, 0, System.Convert.ToInt32(fs.Length));

     日志

            /// <summary>
            /// 向txt文件写入内容
            /// </summary>
            /// <param name="path">txt文件保存的路径,没有就创建,有内容就覆盖。例:"E:\log.txt"</param>
            /// <param name="contentSrt">要写入的内容</param>
            private void WriteTxt(string path, string contentSrt)
            {
                FileStream fs = new FileStream(path, FileMode.Append);
                StreamWriter wr = null;
                wr = new StreamWriter(fs);
                wr.WriteLine(contentSrt + " " + DateTime.Now.ToString());
                wr.Close();
            }

    映射内存的文件

     .NET Framework4.5

    using System.IO.MemoryMappedFiles;

    读取驱动器信息

    使用 DriveInfo读取磁盘信息

    using System.IO;

     代码

                DriveInfo[] driveInfo= DriveInfo.GetDrives();
                foreach (DriveInfo d in driveInfo)
                {
                    //c盘、d盘
                    Console.WriteLine("驱动器的名称:{0}",d.Name);
                    //获取驱动器类型,如 CD-ROM、可移动、网络或固定
                    Console.WriteLine("驱动器的类型:{0}", d.DriveType);
                    //获取一个指示驱动器是否已准备好的值
                    if (d.IsReady==true)
                    {
                        //获取或设置驱动器的卷标
                        Console.WriteLine("驱动器的卷标:{0}", d.VolumeLabel);
                        //获取文件系统的名称,例如 NTFS 或 FAT32
                        Console.WriteLine("驱动器件系统的名称:{0}", d.DriveFormat);
                        //驱动器上的可用空闲空间总量(以字节为单位)
                        Console.WriteLine("驱动器上的可用空闲空间总量:{0}GB", d.TotalFreeSpace/(1024*1024*1024));
                        //获取驱动器上存储空间的总大小(以字节为单位)
                        Console.WriteLine("驱动器上存储空间的总大小:{0}GB", d.TotalSize /(1024 * 1024 * 1024));
                        Console.WriteLine("");
                    }
                 
                }
                Console.ReadKey();

     运行

    文件转内存流

    byte[] data = File.ReadAllBytes(filePath); MemoryStream ms = new MemoryStream(data);
  • 相关阅读:
    java文件的读写程序代码
    C#多线程总结
    动态调用WebService接口的几种方式
    Net中Attribute特性的高级使用及自定义验证实现
    进程、线程、多线程
    C#设计模式之单例模式
    C# HttpClient 请求转发
    webapi Model Validation 模型验证
    加密解密方法
    手把手教Electron+vue的使用
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/6607422.html
Copyright © 2011-2022 走看看