fileinfo和directoryinfo以及file与stream

对于文件和文件夹的操作,fileinfo和directoryinfo是对文件和文件夹进行一些属性类的操作,比如文件的创造,移动,删除,重建,是不能对文件里面具体的内容进行操作的。想要对于文件内部的一些读写修改操作,则是要用到后面的file类和stream数据流类。这里要说明的是file类对文件操作是对全体文件内容的操作,如果文件太大,则用file类处理会很慢,这时用stream数据流类就比较适合读文件较大的文件,因为这是一点点读取文件的,一部分一部分的读取,会提高效率。
首先介绍fileinfo(文件)和directoryinfo(文件夹)类来读取文件和文件夹属性,在这两个类中主要是用来查看文件的基本属性,创建或者移动文件,判断路径是否存在等,这两个类都是在 System.IO类下的,使用他们之前需要先using一下。
这里首先先介绍的是filoinfo类的几种常规操作,主要是包括查看文件的路径,复制,移动,删除等。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace filestudy
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo fileIN = new FileInfo("TextFile1.txt");
            //这里是创建一个相对路径;
            // 这里主要是由于textfile1和当前类是在同一目录下的;
            //该目录指的是文件的编译路径在bin--debug下;
            //可以右击项目属性--生成中看到输出路径;
            //这里由于我们添加的是相对路径,则需要把该文件放在debug下面;
            Console.WriteLine(fileIN.Exists);
            //查看文件是否存在,返回时bool值;
            
            FileInfo fileIN1 = new FileInfo(@"D:\VS书籍学习\文件与数据流的具体操作\文件与数据流系统学习\filestudy\bin\Debug\TextFile1.txt");
            //这里是绝对路径,就是直接输入该文件在电脑中的位置;
            //输入位置时,需要在前面加@符号,这样就可以使这些路径符号符合定义;
            Console.WriteLine(fileIN1.Exists);
            Console.WriteLine(fileIN1.Directory);
            //查看该文件的路径,这个是不显示该文件的名称,只显示其上级名称;
            Console.WriteLine(fileIN1.FullName);
            //查看文件的全部路径,包括本文件名称也显示;
            Console.WriteLine(fileIN1.Length);
            //获取该文件的大小,以字节显示出来;
            Console.WriteLine(fileIN1.IsReadOnly);
            //文件是否是只读选项,这里可以右击文件属性查看;
            ///下面看看fileinfo的方法都有哪些
            fileIN1.MoveTo("text7.txt");
            //将原来的文件改名变成现在的文件
            FileInfo file1 = new FileInfo("test.txt");
            if (file1.Exists==false)
            {
                //如果不存在就创建;
                file1.Create();
            }
            Console.Read();
        }
    }
}


显示结果是这样:
在这里插入图片描述
以上就是fileinfo类对于文件的操作,下面是directoryinfo类主要是对文件夹进行操作,主要包括文件夹的创建、移动等:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace filestudy
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo dirinfo = new DirectoryInfo(@"D:\VS书籍学习\文件与数据流的具体操作");
            //同样这里的directoryinfo类的输入可以是绝对路径也可以是相对路径;
            DirectoryInfo dirinfo1 = new DirectoryInfo("GOOD");
            //同样这里输入的相对路径,相对路径就是在系统默认运行的输出路径,这里是Bin-debug文件夹下面;
            Console.WriteLine(dirinfo.Exists);
            //输出是bool类型,看该文件夹石是否存在;
            Console.WriteLine(dirinfo.Parent);
            //获取其父目录;
            if (!dirinfo1.Exists)
               //如果该文件夹不存在,则新建一个该文件夹
            {
                dirinfo1.Create();
            }
            dirinfo.CreateSubdirectory("这是子目录");
            //在文件夹中再创建一个子目录;
        }
    }
}

总结一下上面两个fileinfo和directoryinfo类就是一般的对文件和文件夹的操作,包括读取信息啊,进行文件夹的复制和删除,创建等。这两个类都是非静态类在使用时,需要进行实例化。

上面两个类进行的都是一些表面的属性,识别名称,复制,创建这些,并不能有效的对文件的具体内容进行操作,下面要介绍的就是对文件的具体所包含的内容操作。
下面首先要介绍的就是file类:
首先介绍的是file类的读操作

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

namespace file类的操作
{
    class Program
    {
        static void Main(string[] args)
        {
           string str= File.ReadAllText("测试.txt");
            //输入一个相对路径,返回的是一个字符串型,是一行一行的读取输出;
            Console.Write(str);
            byte[] str1 = File.ReadAllBytes("测试.txt");
            //这是读取文件的内容,返回的是字节形式的数组;
            foreach (var x in str1)
            //遍历方式读取数组中的内容;
            {
                Console.Write(x);
            }
            byte[] str2 = File.ReadAllBytes("123.png");
            //读取一个图片,结果以字节的形式返回在一个数组内;
            foreach (var item in str2)
            {
                Console.Write(item);
            }
            Console.Read();
        }
    }
}

可以发现在进行file类的读操作时,都会有一个返回值,这个可以时字符串也可以是数组,就是要把数据拿出来放在一个里面空间里面。

下面是用file类对文件进行写入操作:

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

namespace file类的操作
{
    class Program
    {
        static void Main(string[] args)
        {
            File.WriteAllText("写入的文件.txt", "这个是写入的内容");
            //在默认输出路径下,创建一个txt文件,并且在其中写入以上内容;
            File.WriteAllLines("新的文件", new string[] { "qwe", "wer" });
            //在默认输出路径下创建一个新的txt文件,并且在其中写入数组元素;
            byte[] arr = File.ReadAllBytes("123.png");
            //首先将图片的字节存储在字节数组中;
            File.WriteAllBytes("这是图片.png", arr);
            Console.WriteLine("OK");
            Console.Read();

        }
    }
}

这是显示结果:
在这里插入图片描述
可以发现在进行写操作时,直接是对相关的路径文件进行操作,就不用再定义一个空间等的用来存储。

上面介绍的是file类的对文件内部数据的一些操作,这些操作可是是字符串,也可以是数组型的,而下面要讲的就是filestream类,这个类操作的是字节类型的数组文件,一般file类的操作对象是文本文件,而filestream类的操作是非文本文件用的比较多。
这里filestream的读操作:

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

namespace 数据流操作
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream fsread = new FileStream("TextFile1.txt", FileMode.Open);
            //实例化数据流,对文件的操作是打开;
            byte[] arr = new byte[1024];
            //定义一个1024字节的数组,用于数据存储;\
            while (true)
            {
                int len = fsread.Read(arr, 0, arr.Length);
                //从流中读取数据块并把它放在定义好的数组中,返回的该文件的真实长度;
                //读入缓冲区中的总字节数。如果当前的字节数没有所请求那么多,则总字节数可能小于所请求的字节数;或者如果已到达流的末尾,则为零
                if (len==0)
                {
                    Console.WriteLine("OK");
                    break;
                }
                for (int i = 0; i < len; i++)
                {
                    Console.Write(arr[i] + " ");
                }
                Console.Read();
            }
          
        }
    }
}

下面是对filestream的读写操作,就是把数据从一个文件写另一个数据文件中:

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

namespace 数据流操作
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream fsread = new FileStream("123.png",FileMode.Open);
            //实例化一个读操作,目标文件是该默认输出文件的图片;
            FileStream fswrite = new FileStream("234.png", FileMode.Create);
            //实例化一个写操作,这里是创建一个文件,用来写入数据;
            byte[] arr = new byte[1024*1024*2];
            //定义一个2M的字节存储空间;
            while (true)
            {
                int len = fsread.Read(arr, 0, arr.Length);
                //实际的文件大小;
                if (len==0)
                {
                    Console.WriteLine("OK");
                    break;
                }
                fswrite.Write(arr, 0, len);
                //将数组中的数据写入目标位置;
            }
            fsread.Close();
            fswrite.Close();
            //关闭数据流;
          
        }
    }
}

以上就是filestream的一般操作,由于他比较适合读取一些二进制的文件,放在字节数组中,方便操作,但是我们不知道文本里面是含的什么信息,因为读取出的是字节数据,所以又有了下面的两个类streamwriter和streamreader:
首先介绍的时streamreader,这是对文件内部数据的读操作:

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

namespace streamreader
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sread = new StreamReader("TextFile1.txt");
            //创建一个实例对象,所要读取的文件时TEXE文件;
            while (true)
            {
                string str = sread.ReadLine();
                //该方法返回的时一行,就是执行一次返回一行;
                if (str == null)
                {//如果读取到文件的最后,则是null
                    Console.WriteLine("ok");
                    break;
                }
                Console.WriteLine(str);

            }
            sread.Close();
            Console.ReadLine();
        }
    }
}

下面介绍的是streamweiter类,就是写入数据流:

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

namespace streamreader
{
    class Program
    {
        static void Main(string[] args)
        {
            /* StreamReader sread = new StreamReader("TextFile1.txt");
             //创建一个实例对象,所要读取的文件时TEXE文件;
             while (true)
             {
                 string str = sread.ReadLine();
                 //该方法返回的时一行,就是执行一次返回一行;
                 if (str == null)
                 {//如果读取到文件的最后,则是null
                     Console.WriteLine("ok");
                     break;
                 }
                 Console.WriteLine(str);

             }
             sread.Close();
             Console.ReadLine();*/

            StreamWriter swrit = new StreamWriter("TEXT2.txt");
            //创建一个写数据流,写的数据流写入的时默认路径下面的文件;
            while (true)
            {
                string str = Console.ReadLine();
                //用户输入需要写的数据;
                if (str == "w")
                { break; }
                swrit.Write(str);
                
            }
            swrit.Close();

        }
    }
}

总结一下,对于文件和文件夹的操作,fileinfo和directoryinfo是对文件和文件夹进行一些属性类的操作,比如文件的创造,移动,删除,重建,是不能对文件里面具体的内容进行操作的。想要对于文件内部的一些读写修改操作,则是要用到后面的file类和stream数据流类。这里要说明的是file类对文件操作是对全体文件内容的操作,如果文件太大,则用file类处理会很慢,这时用stream数据流类就比较适合读文件较大的文件,因为这是一点点读取文件的,一部分一部分的读取,会提高效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值