C#.NET 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )

一 基本介绍
    操作文档,文件夹,需要用到的类
    1 Directory(静态类) :     用于创建、移动和删除等操作通过目录和子目录
       DirectoryInfo(非静态):
    2 File(静态类)  :提供用于创建、复制、删除、移动和打开文件的静态类,并协助创建 FileStream 对象    
       FileInfo(非静态)
    3 StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符
     StreamWriter:实现一个 TextWriter,使其以一种特定的编码向流中写入字符
 
二   文件夹操作
操作文件夹用Directory 或者 DirectoryInfo
2.1 创建文件夹
0
0
 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 }
0
     2.2 删除文件夹
0
0
 1 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 }
0
     2.3 移动文件夹
0
0
             string path = @"F:\TestFile"; string newPath = @"F:\NewFile"; //移动文件夹 public void MoveFolder(string path, string newPath)         { if (Directory.Exists(path))             { //移动包括文件夹在内的所有文件  Directory.Move(path,newPath);             }         }
0
     2.4 获取文件夹下所有文件名
0
0
       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);//带文件路径全名  }         }
0
     2.5  文件夹重命名 
其实与移动文件夹方法是一样的,.net并没有提供重命名的方法,而是用新路径替换原路径以达到重命名的交果
0
0
        string name = @"F:\TestFile"; string newName = @"F:\NewFile"; //文件夹重命名 public void Rename(string name ,string newName)         { if (Directory.Exists(name))             {                 File.Move(name,newName);             }         }
0
     2.6 获取文件夹下所有文件夹名
0
0
        string path = @"F:\TestFile"; //获取路径下所有文件夹 public void GetAllFolder(string path)         {             DirectoryInfo directory = new DirectoryInfo(path);             DirectoryInfo[] allFolder = directory.GetDirectories();//返回当前目录的子目录(文件夹) foreach (var folder in allFolder)             {                 Console.WriteLine(folder.Name);                 Console.WriteLine(folder.FullName);//带全路径的名称 //还可以再遍历子文件夹里的文件,或文件夹(最好用递归的方式)  folder.GetDirectories();             }         } 
0
     2.7 处理路径得到文件名和文件后缀
0
0
       string path = @"F:\TestFile"; //处理路径得到文件名和文件后缀, public void FormatFile(string path)         {             DirectoryInfo directory = new DirectoryInfo(path);             FileInfo[] files = directory.GetFiles(); foreach (var file in files)             { string name = Path.GetFileNameWithoutExtension(file.Name);//取文件名 string extension = Path.GetExtension(file.Name);//取后缀名 Console.WriteLine("文件名:{0} 后缀名:{1}",name,extension);             }         }
0
     2.8 判断路径是文件或者文件夹(无效路径返回0)
0
0
        string path = @"F:\TestFile"; //判断路径是文件或者文件夹(无效路径返回0) public void IsFileOrFolder(string path)         {             DirectoryInfo directory = new DirectoryInfo(path); if (directory.Exists)//指定的目录是否存在 Console.WriteLine("Folder"); else if (File.Exists(path))//指定的文件是否存在 Console.WriteLine("File"); else Console.WriteLine("0");         }
0
 
 三 文档操作(txt)
需要以下几个类:Directory 或者DirectoryInfo ,File 或者 FileInfo
   3.1 创建文档
0
0
        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);             }         }
0
   3.2 复制文档
0
0
      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);             }         }
0
   3.3  移动文档
0
0
       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);             }         }
0
   3.4  删除文档
0
0
        string path = @"E:\TestFile\test.txt"; //删除文档 public void DeleteFile(string path)         { if (File.Exists(path))             {                 File.Delete(path);             }         }
0
 四 文档读写操作(文档流操作) 对 第三点  的扩充
     需要以下类:FileStream 此类继承了Stream 类并重写了大部分方法,并提供多个带参构造函数,注意:要读取的目标流不是保持恒定的,而是每读一次就会相应的减少,在练习时
没注意,纠结了很久
   4.1 写入字符
0
0
        string path = @"E:\TestFile\test.txt"; //往以有文档中写入字符 public void CreateText(string path)         {             StreamWriter writer=File.CreateText(path); //直接写入字符的write方法,每次写入都会覆盖之前的内容 writer.Write("你好!"); //把缓存流的数据写入到基础流  writer.Flush(); //关闭StreamWriter对象及基础流  writer.Close();         }
0
   4.2 以流的形式写入文档
0
0
//将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中 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();         }
0
   4.3 以流的形式追加到文档
0
0
        //将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中(追加内容) 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();         }
0
   4.4 读取目标文档指定的一行数据
0
0
        string paths = @"F:\TestFile\ReadStream.txt"; int readNum = 3; //读取目标文本指定的某一行数据 public void ReadoneLine(string path,int readNum)         { //可以循环读每一行,然后到Add到集合中,再到集合中做处理 StreamReader reader = new StreamReader(path,Encoding.Default); var streamList = new List<string>(); int count=0; string lineText = string.Empty; while ((lineText = reader.ReadLine()) != null)//对于流的读取每ReadLine一次流中就少一行,所直接在While用读到的流做判断,避免二次读  {                 streamList.Add(lineText);             } foreach (var item in streamList)             { if (count == readNum - 1)                 {                     Console.WriteLine(item);                 }                 count++;             }                      }
0
 
五 读写流操作文档
 需要以下几个类:StreamReader StreamWriter
  5.1 字符串读取写操作
0
0
        //读取文档并写入到另一文档中(用字符串写入的方法) 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();            }         }
0
  5.2 字符流读写操作
0
0
        //用字符流的方式读写文档 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();             }
0
 
 
 
posted @ 2022-07-26 10:10  devgis  阅读(1289)  评论(0编辑  收藏  举报