C#中文件操作

    1、获取目录信息

       DirectoryInfo directory = new DirectoryInfo(LogPath);     //不存在不报错  注意exists属性

       Console.WriteLine(string.Format("{0} {1} {2}", directory.FullName, directory.CreationTime, directory.LastWriteTime));

    2、获取文件信息

       FileInfo fileInfo = new FileInfo(Path.Combine(LogPath, "info.txt"));

       Console.WriteLine(string.Format("{0} {1} {2}", fileInfo.FullName, fileInfo.CreationTime, fileInfo.LastWriteTime));

    3、写文件

       public static void Write()

       {

           string fileName = "info.txt";        //指定文件名称

           string totalPath = Path.Combine(LogPath, fileName);    //组建文件的全路径(包括路径和文件名)

           string msg = "今天是Course6IOGDI,今天上课的人有9个1";    //写入的内容

           StreamWriter sw = null;     //文件流

           try

           {

               if (Directory.Exists(LogPath))     //判断目录文件是否存在

               {

                   if (File.Exists(totalPath))    //判断文件是否存在

                   {

                       sw = File.AppendText(totalPath);     //存在就追加文本内容,没有就新建

                   }

                   else

                   {

                       sw = File.CreateText(totalPath);     //不存在就新建文件

                   }

               }

               else

               {

                   Directory.CreateDirectory(LogPath);     //如果目录不存在就创建目录

                   sw = File.CreateText(totalPath);        //然后新建文件

               }

               sw.WriteLine(msg); //把内容写入文件流

           }

           finally

           {

               if (sw != null)     //只要文件流不是空的

               {

                   sw.Flush();     //清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。

                   sw.Close();     //关闭文件流

                   sw.Dispose();   //释放内存

               }

           }

       }

    4、读取文件

       A、一次性读取文件

          public static void Read()

          {

              string fileName = @"info.txt";       //指定文件名称

              string totalPath = Path.Combine(LogPath, fileName);    //组建文件的全路径(包括路径和文件名)

              if (File.Exists(totalPath))         //判断文件是否存在

              {

                  string[] results = File.ReadAllLines(totalPath);      //打开指定文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件。

                  foreach (string result in results)                 //遍历读取结果

                  {

                      Console.WriteLine(result);

                  }

              }

          }

       B、单行读取模式

          using (StreamReader sr = new StreamReader(totalPath))   //用using来关闭对象释放内存,能使用using的对象必须继承了IDisposeable

          {   

              string oneLine = sr.ReadLine();    //从当前流中读取一行字符并将数据作为字符串返回。

              while (oneLine != null)            //读到的行资料不是空时继续

              {

                  Console.WriteLine(oneLine);    //显示

                  oneLine = sr.ReadLine();       //读下一行

              }

          }

       C、读取大量数据

          public void ReadHug()

          {

              Byte[] byteData = new byte[100];    //字节数组

              char[] charData = new char[1000];   //字符数组

              string fileName = @"info.txt";

              string totalPath = Path.Combine(LogPath, fileName);

              FileStream file = new FileStream(totalPath, FileMode.Open);

              file.Seek(0, SeekOrigin.Begin);     //从开头开始偏移量为0的位置开始读取

              file.Read(byteData, 0, 100);

                      //byteData是传进来的字节数组,用以接受FileStream对象中的数据,

                      //第2个参数是字节数组中开始写入数据的位置,它通常是0,是byteData中开始读取的偏移量,

                      //最后一个参数规定从文件读多少字符.

              Decoder d = Encoding.Default.GetDecoder();

                      //声明一个解码器,该解码器将已编码的字节序列转换为字符序列。

              d.GetChars(byteData, 0, byteData.Length, charData, 0);    //将一个字节序列解码为一组字符。

                      //第1个参数:包含要解码的字节序列的字节数组。

                      //第2个参数:第一个要解码的字节的索引。

                      //第3个参数:要解码的字节数。

                      //第4个参数:要用于包含所产生的字符集的字符数组。

                      //第5个参数:开始写入所产生的字符集的索引位置。

              Console.WriteLine(charData);

              file.Close();

          }

       D、文件复制

          File.Copy(totalPath, totalPath.Replace("info.txt", "info_copy.txt"));

       E、删除文件

          File.Delete(totalPath);

       D、使用递归方法查找所有文件

          public static void RecursionShow()

          {

              string rootPath = @"E:\online_5\";           //指定要查询的目录

              DirectoryInfo dirRoot = new DirectoryInfo(rootPath);  //获取根目录的目录信息

              List<FileInfo> fileInfoList = new List<FileInfo>();   //创建文件信息存储List

              fileInfoList = GetFileByDir(dirRoot, fileInfoList);   //运行获取文件清单的递归程序

          }

          private static List<FileInfo> GetFileByDir(DirectoryInfo dirCurrent, List<FileInfo> fileInfoList)

          {

              FileInfo[] fileArray = dirCurrent.GetFiles();      //获取当前目录文件信息的数组

              if (fileArray != null && fileArray.Length > 0)

              {

                  fileInfoList.AddRange(fileArray.ToList());     //有文件就将他添加到指定集合的末尾。

              }

              DirectoryInfo[] dirArray = dirCurrent.GetDirectories();   //获取当前目录中的子目录信息,并保存到数组

              if (dirArray != null && dirArray.Length > 0)  //判断有无子目录

              {

                  foreach (DirectoryInfo dir in dirArray)   //有子目录的话遍历这些子目录,并再此获取子目录中的文件

                  {

                      GetFileByDir(dir, fileInfoList);      //自己调用自己,形成递归。

                  }

             }

              return fileInfoList;      //返回获得的文件信息List

         }

posted @ 2015-12-25 20:06  97黄三  阅读(1412)  评论(0编辑  收藏  举报