操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang

Posted 人走茶亦凉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang相关的知识,希望对你有一定的参考价值。

一 基本介绍

    操作文档,文件夹,需要用到的类

    1 Directory (静态类) :      用于创建、移动和删除等操作通过 目录 和子 目录

       DirectoryInfo (非静态):

    2 File (静态类)  : 提供用于创建、复制、删除、移动和打开文件的静态类,并协助创建 FileStream 对象    

       FileInfo (非静态)

    3 StreamReader : 实现一个 TextReader,使其以一种特定的编码从字节流中读取字符

     StreamWriter : 实现一个 TextWriter,使其以一种特定的编码向流中写入字符

二   文件夹操作

操作文件夹用Directory 或者 DirectoryInfo

2.1 创建文件夹

 1        string path = @"F:\TestFile";
 2       //创建文件夹
 3         public void CreatFolder(string path)
 4         {
 5             if (Directory.Exists(path))
 6             {
 7                 Directory.Delete(path);
 8             }
 9            Directory.CreateDirectory(path);
10             
11         }

     2.2 删除文件夹

          string path = @"F:\TestFile";
 2 
 3         //删除文件夹
 4         public void DeleteFolder(string path)
 5         {
 6             //先删除文件夹中所有文件
 7             DirectoryInfo directoryInfo = new DirectoryInfo(path);
 8             foreach (var directory in directoryInfo.GetFiles())
 9             {
10                 File.Delete(directory.FullName);
11             }
12             //文件夹必须为空
13             if (Directory.Exists(path))
14             {
15                 Directory.Delete(path);
16             }
17         }

2.3 移动文件夹

string path = @"F:\TestFile";
            string newPath = @"F:\NewFile";
       //移动文件夹
        public void MoveFolder(string path, string newPath)
        {
            if (Directory.Exists(path))
            {
                //移动包括文件夹在内的所有文件
                Directory.Move(path,newPath);
            }
        }

 2.4 获取文件夹下所有文件名

string path = @"F:\TestFile";

        //获取文件夹下所有文件名
        public void GetFolderAllFiles(string path)
        {
            DirectoryInfo directory = new DirectoryInfo(path);
            var files = directory.GetFiles();
            foreach (var file in files)
            {
                Console.WriteLine(file.Name);
                Console.WriteLine(file.FullName);//带文件路径全名
            }
        }

三 文档操作(txt)

需要以下几个类:Directory 或者DirectoryInfo ,File 或者 FileInfo

   3.1 创建文档

string path = @"F:\TestFile\test.txt";
        //创建文档
        public void CreateFile(string path)
        {
            //文件路径用Directory判断是否存在
            if (Directory.Exists(path))
            {
                //先删除存在的文件 
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
                File.Create(path);
            }
        }
展开代码

   3.2 复制文档

string path = @"E:\TestFile\test.txt";
      string newPath = @"E:\Test2File\newTest.txt";
      //复制文档
        public void CopyFile(string sourcePath, string destPath)
        {
            //只能针对同一卷轴(盘)下的文件
            //destPath 为要复制的新地址,(destPath指定的文件名必须是未创建的,执行Copy方法时才会创建该文件)
            if (File.Exists(sourcePath))
            {
                File.Copy(sourcePath, destPath);
            }
        }
View Code

   3.3  移动文档

string path = @"E:\TestFile\test.txt";
       string newPath = @"E:\Test2File\newTest.txt";
       //移动文档
        public void MoveFile(string SourcePath, string destPath)
        {
            //只能针对同一卷轴(盘)下的文件
            //destPath 为要移动的新地址(destPath指定的文件名必须是未创建的,执行Move方法时会将Source文件移动到新地址可以重新命名)
            if (File.Exists(SourcePath))
            {
                File.Move(SourcePath, destPath);
            }
        }

   3.4  删除文档

string path = @"E:\TestFile\test.txt";
       //删除文档
        public void DeleteFile(string path)
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }

 四 文档读写操作(文档流操作) 对 第三点  的扩充

     需要以下类:FileStream 此类继承了Stream 类并重写了大部分方法,并提供多个带参构造函数

   4.1 写入字符

string path = @"E:\TestFile\test.txt";
        //往以有文档中写入字符
        public void CreateText(string path)
        {
            StreamWriter writer=File.CreateText(path);
            //直接写入字符的write方法,每次写入都会覆盖之前的内容
            writer.Write("你好!");
            //把缓存流的数据写入到基础流
            writer.Flush();
            //关闭StreamWriter对象及基础流
            writer.Close();
        }

 4.2 以流的形式写入文档

//将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中
        public void ReadAndWriteFile()
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";

            //Read
            //打开现有文件以进行读取
            FileStream rs = File.OpenRead(readPath);
            byte[] buffer = new byte[rs.Length];
            rs.Read(buffer, 0, buffer.Length);  //将文件内容读到字节流中
            rs.Close();
            //Write
            //打开现有文件以进行写入
            FileStream stream = File.OpenWrite(writePath);
            stream.Write(buffer, 0, buffer.Length);
            stream.Flush();
            stream.Close();

        }

    4.3 以流的形式追加到文档

//将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中(追加内容)
        public void ReadAndWriteNewFile()
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";
            //Read
            FileStream rd = File.Open(readPath,FileMode.Open);
            byte[] buffer = new byte[rd.Length];
            rd.Read(buffer, 0, buffer.Length);
            rd.Close();

            //Write
            FileStream wt = File.Open(writePath,FileMode.Append);//设为追加到原文件中
            wt.Write(buffer,0,buffer.Length);
            wt.Flush();
            wt.Close();
        }

五 读写流操作文档

 需要以下几个类:StreamReader StreamWriter

  5.1 字符串读取写操作

//读取文档并写入到另一文档中(用字符串写入的方法)
        public void ReadFile() 
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";
           
           using (StreamReader reader = new StreamReader(readPath,Encoding.Default)) //用默认的编码格式(必须要转格式否则乱码)
           {

               var rd = reader.ReadToEnd();
               
               StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);//需要转成UTF-8的格式(可转可不转格式)
               writer.Write(rd);
               writer.Flush();
               writer.Close();

           }
        }

  5.2 字符流读写操作

//用字符流的方式读写文档
        public void ReadWriteByByte()
        {

            string readPath = @"F:\TestFile\ReadStream.txt";
            string writePath = @"F:\TestFile\WriteStream.txt";
            using (StreamReader reader = new StreamReader(readPath,Encoding.Default))//需要指定编码,否则读到的为乱码
            {
                #region 错误方法
                //Read  注意:文本中的字符只能被读取一次,第二次时读取不到了
                //var readStr =reader.ReadToEnd();//第一次读取
                //char[] buffer = new char[readStr.Length];
                //reader.Read(buffer, 0, buffer.Length);//第二次读取时,读不到值
                #endregion
                //Read 
                char[] buffer = new char[10000];
                reader.Read(buffer, 0, buffer.Length);
                //Write
                StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);
                writer.Write(buffer, 0, buffer.Length);
                writer.Flush();
                writer.Close();
            }

 

以上是关于操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang的主要内容,如果未能解决你的问题,请参考以下文章

C# 操作文件路径(Directory)的常用静态方法

C# 操作文件路径(Directory)的常用静态方法

Warning: mysql_connect(): No such file or directory 解决方案总结(操作系统: Mac)

File类和Directory类

步步为营-15-文件夹的操作

文件操作类File