file和filestream

在C#编程环境中,当我们对电脑文件进行读写、移动、复制、删除等这些操作时,这些都可以在system.IO名称空间下,所以当我们想要通过C#编程语言对其进行操作时,需要添加该名称空间,它内部包含对数据流和文件进行同步或异步读取与写入操作。
先简单介绍几个文件操作类:
首先是file类:这是一个静态类,内部包含常见,复制,移动操作的一些静态方法,其内部包含众多的操作方法:
主要有copy:将现有文件复制到新文件;create:在指定路径中创建文件;delete:删除指定文件;exist:判断该文件是否存在;move:将指定文件移到新位置等这些:
再讲filestream类,这个是对数据流操作的,我们可以理解成是对字节进行操作的。该类中的方法是非静态方法,所以使用时需要实例化。该类中我们这里就主要介绍三个方法,依次是读操作,写操作以及同时的读写操作。
例如读操作程序:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FSteam
{
    class Program
    {
        static void Main(string[] args)
        {
            READ1(@"D:\VS书籍学习\123.txt");
            //这里用@符号是可以让程序知道我这个输入的地址格式可以被识别。
            Console.Read();
        }
        public static void READ1(string str1)
        { 
           if (!File.Exists(str1))
            {
                Console.WriteLine("输入的路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            FileStream fsread = new FileStream(str1,FileMode.Open,FileAccess.Read );
            //FileStream类是非静态的,所以需要先进行实例化;
            //定义所要操作的文件地址;filemode--对文件进行的操作,这里是open操作;
            //fileaccess--对文件内部的数据进行的操作,这里是读操作;
            byte[] buf = new byte[1024 * 1024 * 5];
            //这里是1024B*1024=1KB*1024=1M.这里就是定义了一个5M的存储字节空间;
            //由于是进行的数据读操作,所以要定义一个数组空间来对数据进行存储。
            int x = fsread.Read(buf, 0, buf.Length);
            //这里是进行数据的读操作,将数据以字节的形式存储在数组空间内
            //由于我们刚开始定义的数组空间的大小并不是真正的文件数据大小。
            //这里的x的值就是真正的数据大小。
            string str = Encoding.Default.GetString(buf, 0, x);
            //由于之前在数组中存取的数据是以字节形式存在的,为了显示出来
            //这里用encoding来进行解码,将字节转换成字符串形式显示。
            //可以发现这里buf用的是x,而不是buf.length,这里用的是真实值。
            Console.WriteLine(str);
        }      
    } 
}

这就是对一个txt文件的读操作,我在电脑内部定义了一个txt文件:
在这里插入图片描述
他的地址是:
在这里插入图片描述
而下面这个是VS的运行结果:
在这里插入图片描述
以上就是一般的读取操作,下面的程序是写操作:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FSteam
{
    class Program
    {
        static void Main(string[] args)
        {
            WRITE1(@"D:\VS书籍学习\123.txt");
            //这里用@符号是可以让程序知道我这个输入的地址格式可以被识别。
            Console.Read();
        }
        public static void READ1(string str1)
        {
            if (!File.Exists(str1))
            {
                Console.WriteLine("输入的路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            FileStream fsread = new FileStream(str1,FileMode.Open,FileAccess.Read );
            //FileStream类是非静态的,所以需要先进行实例化;
            //定义所要操作的文件地址;filemode--对文件进行的操作,这里是open操作;
            //fileaccess--对文件内部的数据进行的操作,这里是读操作;
            
            byte[] buf = new byte[1024 * 1024 * 5];
            //这里是1024B*1024=1KB*1024=1M.这里就是定义了一个5M的存储字节空间;
            //由于是进行的数据读操作,所以要定义一个数组空间来对数据进行存储。
            int x = fsread.Read(buf, 0, buf.Length);
            //这里是进行数据的读操作,将数据以字节的形式存储在数组空间内
            //由于我们刚开始定义的数组空间的大小并不是真正的文件数据大小。
            //这里的x的值就是真正的数据大小。
            string str = Encoding.Default.GetString(buf, 0, x);
            //由于之前在数组中存取的数据是以字节形式存在的,为了显示出来
            //这里用encoding来进行解码,将字节转换成字符串形式显示。
            //可以发现这里buf用的是x,而不是buf.length,这里用的是真实值。
            Console.WriteLine(str);
        }
        public static void WRITE1(string str1)
        {
            if (!File.Exists(str1))
            {
                Console.WriteLine("输入的路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            using (FileStream fsread = new FileStream(str1, FileMode.Open, FileAccess.Write))
                //定义一个写的实例里面包含地址,形式
            {
                string str = "我是真的爱你";
                //这里是要输入的字符串
                byte[] buf = Encoding.Default.GetBytes(str);
                fsread.Write(buf, 0, buf.Length);

            }
            Console.WriteLine("输入完毕");

        }
        
    }
}

以上就是写操作的程序,这里我们看一下VS的输出显示框图:

在这里插入图片描述
这就是写入之后的数据内容:
在这里插入图片描述
可以发现写的字符串会自动覆盖原来的字符串所在位置。
下面就是最后一种就是将这两种结合起来,也就是读写操作,就是先将一个文件的数据读取出来,再写入另一个文件中。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FSteam
{
    class Program
    {
        static void Main(string[] args)
        {
              string sourth= @"D:\VS书籍学习\123.txt";
              string term = @"D:\VS书籍学习\456.txt";
            //这里用@符号是可以让程序知道我这个输入的地址格式可以被识别。
            DUXIE(sourth, term);
            Console.Read();
        }
        public static void READ1(string str1)
        {
            if (!File.Exists(str1))
            {
                Console.WriteLine("输入的路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            FileStream fsread = new FileStream(str1, FileMode.Open, FileAccess.Read);
            //FileStream类是非静态的,所以需要先进行实例化;
            //定义所要操作的文件地址;filemode--对文件进行的操作,这里是open操作;
            //fileaccess--对文件内部的数据进行的操作,这里是读操作;

            byte[] buf = new byte[1024 * 1024 * 5];
            //这里是1024B*1024=1KB*1024=1M.这里就是定义了一个5M的存储字节空间;
            //由于是进行的数据读操作,所以要定义一个数组空间来对数据进行存储。
            int x = fsread.Read(buf, 0, buf.Length);
            //这里是进行数据的读操作,将数据以字节的形式存储在数组空间内
            //由于我们刚开始定义的数组空间的大小并不是真正的文件数据大小。
            //这里的x的值就是真正的数据大小。
            string str = Encoding.Default.GetString(buf, 0, x);
            //由于之前在数组中存取的数据是以字节形式存在的,为了显示出来
            //这里用encoding来进行解码,将字节转换成字符串形式显示。
            //可以发现这里buf用的是x,而不是buf.length,这里用的是真实值。
            Console.WriteLine(str);
        }
        public static void WRITE1(string str1)
        {
            if (!File.Exists(str1))
            {
                Console.WriteLine("输入的路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            using (FileStream fsread = new FileStream(str1, FileMode.Open, FileAccess.Write))
            //定义一个写的实例里面包含地址,形式
            {
                string str = "我是真的爱你";
                //这里是要输入的字符串
                byte[] buf = Encoding.Default.GetBytes(str);
                fsread.Write(buf, 0, buf.Length);

            }
            Console.WriteLine("输入完毕");

        }
        public static void DUXIE(string str1,string str2)
        {
            if (!File.Exists(str1))
            {
                Console.WriteLine("输入的源头路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            if (!File.Exists(str2))
            {
                Console.WriteLine("输入的目标路径不正确");
                //调用file.exists方法,如果路径不正确会有提示,而不会使系统出错
                return;
            }
            using (FileStream fsread = new FileStream(str1, FileMode.Open, FileAccess.Read))
                //所读取的文件位置
            {
                using (FileStream fswrite = new FileStream(str2, FileMode.Open, FileAccess.Write))
                    //目标位置
                {
                    byte[] buf = new byte[1024];
                    //定义中间缓存的数组的大小,这里是1024B
                    while (true)
                    {
                        int x = fsread.Read(buf, 0, buf.Length);
                        //读取数据并存到数组中,得到真是数据长度x
                        if (x == 0)
                        { break; }
                        //就是文件的最后没有数据是返回读到的为0,这是一行一行读写的
                        fswrite.Write(buf, 0, x);
                    }
                    Console.WriteLine("好了");
                }
            }

        }


    }

    
}

这是显示结果:
在这里插入图片描述
这是电脑内部文件:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值