详解C# FileStream类

2020-06-10 11:59:51王振洲

File和FileStream的区别

File是一个静态类;FileStream是一个非静态类。

File:是一个文件的类,对文件进行操作。其内部封装了对文件的各种操作(MSDN:提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建FileStream对象)。

  FileStream:文件流的类。对txt,xml,avi等文件进行内容写入、读取、复制...时候需要使用的一个工具。

创建实例

string path = "D:test.txt";

FileStream fileStream1 = **new** FileStream(path, FileMode.Open);

FileStream fileStream2 = **new** FileStream(path, FileMode.Open, FileAccess.Read);

FileStream fileStream3 = **new** FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

FileStream fileStream4 = **new** FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 10, FileOptions.None);
    //定义文件路径
    string path = @"D:codetest.txt";
    //创建 FileStream 类的实例
    FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    //定义属性
    string msg = "11111";
    //将字符串转换为字节数组
    byte[] bytes = Encoding.UTF8.GetBytes(msg);
    //向文件中写入字节数组
    fileStream.Write(bytes, 0, bytes.Length);
    //刷新缓冲区
    fileStream.Flush();
    //关闭流
    fileStream.Close();
class Program
{
  static void Main(string[] args)
  {
    //定义文件路径
    string path = @"D:codetest.txt";
    //判断是否含有指定文件
    if (File.Exists(path))
    {
      FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
      //定义存放文件信息的字节数组
      byte[] bytes = new byte[fileStream.Length];
      //读取文件信息
      fileStream.Read(bytes, 0, bytes.Length);
      //将得到的字节型数组重写编码为字符型数组
      char[] c = Encoding.UTF8.GetChars(bytes);
      //输出
      Console.WriteLine(c);
      //关闭流
      fileStream.Close();
    }
    else
    {
      Console.WriteLine("不存在!");
    }
  }
}

文件复制

 public class FileSreamTest
  {
    

    public static void CopyFile(string source,string target)
    {
      //读取文件流
      using (FileStream fsRead = new FileStream(source,FileMode.Open,FileAccess.Read))
      {
        //写入流
        using (FileStream fsWrite = new FileStream(target,FileMode.OpenOrCreate,FileAccess.Write))
        {
           byte[] buffer = new byte[1024*1024*5];

           while (true)
           { 
             //返回读取字节数
            int r= fsRead.Read(buffer,0,buffer.Length);
            if (r==0)
            {
              break;
            }
             //写入
             fsWrite.Write(buffer,0,r);
           }
          
        }
      }
    }

  }



  static void Main(string[] args)
    {
     string source =@"E:功能流程.7z";
     string target=@"C:UsersCH190006DesktopTest功能流程.7z";
     FileSreamTest.CopyFile(source,target);
      Console.ReadKey();

    }