文件流操作流程代码



使用FileStream来读取数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//FileStream StreamReader和StreamWriter
//FileStream用来操作字节
//使用FileStream来读取一个文本文件 IO

//1、创建FileStream对象
//第一个参数用来指定操作文件的路径
//第二个参数用来指定系统打开文件的方式
//第三个参数用来指定我们要对数据的操作
            
using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\我是数据1.txt", FileMode.OpenOrCreate, FileAccess.Read))
{

//2、设置缓冲区的大小 5M
     byte[] buffer = new byte[1024 * 1024 * 5];

//3、开始读取数据
     int r = fsRead.Read(buffer, 0, buffer.Length);

//4、去缓冲区中获得我们需要的数据
     string s = Encoding.Default.GetString(buffer, 0, r);
     Console.WriteLine(s);

//5、释放资源 流所占用的资源GC不能释放 需要我么自己手动的释放  
//写在using里面就不许要我们自己去手动释放资源了
     //fsRead.Dispose();
     //fsRead.Close();
     Console.ReadKey();
} 

使用FileStream写入数据

1
2
3
4
5
6
using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\我是数据2.txt", FileMode.Append, FileAccess.Write))
{
     string str = "我是数据";
     byte[] buffer = Encoding.Default.GetBytes(str);
     fsWrite.Write(buffer, 0, buffer.Length);
}

使用FileStream复制一个文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
static void Main(string[] args)
{
    string source = @"C:\Users\SpringRain\Desktop\222.txt";   //源文件路径
    string target = @"C:\Users\SpringRain\Desktop\333.txt";    //新文件路径


    CopyFile(source, target);
    Console.WriteLine("复制成功");
    Console.ReadKey();
}

static void CopyFile(string source, string target)
{
    //负责读取
    using (FileStream fsRead = new FileStream(source, FileMode.OpenOrCreate, FileAccess.Read))   //我们的程序是从上往下执行的,所以我们可以在循环里面进行循环的读取和写入。
    {
         //负责写入
         using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
         {
               //5M的缓冲区
               byte[] buffer = new byte[1024 * 1024 * 2];   //在外面设置一个缓冲区
               while (true)   //我们循环的写入和读取文件,因为文件流的操作方式就是从缓冲区不断de读取和写入
               {
                    //开始读取
                    int r = fsRead.Read(buffer, 0, buffer.Length);   //读取缓冲区的实际文件内容
                    if (r == 0)    //如果缓冲区么有数据了,那么就不再进行读写咋操作了
                    {
                        break;
                    }
                    fsWrite.Write(buffer, 0, r);   //写入文件
               }
          }
     }
}