file和filestream

本文详细介绍了在C#中如何使用FileStream类进行文件的读、写及读写操作,包括实例化过程、读写方法的使用及数据转换,适合初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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("好了");
                }
            }

        }


    }

    
}

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

在C++中,`File``fstream`并不是标准库中的类,但如果你是在谈论Windows环境下的`File`(通常指的是`ofstream`, `ifstream`, 或`fstream`)或者在讨论跨平台的C++文件操作,那么这里可能会是指`std::fstream`。 `std::fstream`是一个模板类,它是C++ `<fstream>`头文件中的内容,用于处理二进制文本文件的输入输出。它结合了`std::ifstream`(用于读取)`std::ofstream`(用于写入)的功能,提供了一种方便的方式来操作文件。`fstream`支持多种模式,如读模式(`ios::in`)、写模式(`ios::out`)、追加模式(`ios::app`)等,并且可以用来检查错误。 相比之下,`File`可能是特定编程环境或库中定义的一个类,比如在某些Windows API或MFC库中,可能有名为`File`的类专门用于Windows文件操作。这种情况下,`File`类通常会封装更底层的文件操作,如创建、删除、移动等,并可能具有特定于平台的特性。 具体到`std::File``std::fstream`的区别: 1. 功能范围:`fstream`更通用,适用于读写操作;而`File`可能针对特定平台或库有定制的功能。 2. 文件操作模式:`fstream`提供了丰富的打开模式,`File`可能没有这么多选项。 3. 错误处理:`fstream`内置了错误检查机制,能更好地处理文件操作可能引发的异常;`File`可能需要开发者手动处理错误。 4. 跨平台性:`fstream`是C++标准库的一部分,相对平台无关;`File`可能局限于某个特定环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值