【类】C# 文件操作类(SamWang)

类库:

  1 /******************************************************************
  2  * 创 建 人:   SamWang
  3  * 创建时间:   2012-05-09
  4  * 描    述:
  5  *              C#文件操作类
  6  * 内容描述:   1.删除文件夹
  7  *              2.移动文件夹
  8  *              3.复制文件夹
  9  * 版    本:   V1.0 (2012-05-09)   
 10  * 修 改 人: 
 11  * 修改内容:
 12  * 版    本:
 13 ******************************************************************/
 14 using System;
 15 using System.IO;
 16 using System.Collections.Generic;
 17 
 18 namespace TestFileOperate
 19 {
 20     class FileOperate
 21     {      
 22         #region 文件操作
 23         /// <summary>
 24         /// 删除文件
 25         /// </summary>
 26         /// <param name="filePath"></param>
 27         public static void DeleteFile(string filePath)
 28         {
 29             if (File.Exists(filePath))
 30             {
 31                 File.Delete(filePath);
 32             }            
 33         }      
 34         
 35         #endregion
 36 
 37         #region 文件夹操作
 38         /// <summary>
 39         /// 复制文件夹中的所有文件夹与文件到另一个文件夹
 40         /// </summary>
 41         /// <param name="sourcePath">源文件夹</param>
 42         /// <param name="destPath">目标文件夹</param>
 43         public static void CopyFolder(string sourcePath,string destPath)
 44         {
 45             if (Directory.Exists(sourcePath))
 46             {
 47                 if (!Directory.Exists(destPath))
 48                 {
 49                     //目标目录不存在则创建
 50                     try
 51                     {
 52                         Directory.CreateDirectory(destPath);
 53                     }
 54                     catch (Exception ex)
 55                     {
 56                         throw new Exception("创建目标目录失败:" + ex.Message);
 57                     }
 58                 }
 59                 //获得源文件下所有文件
 60                 List<string> files = new List<string>(Directory.GetFiles(sourcePath));                
 61                 files.ForEach(c =>
 62                 {         
 63                     string destFile = Path.Combine(new string[]{destPath,Path.GetFileName(c)});
 64                     File.Copy(c, destFile,true);//覆盖模式
 65                 });
 66                 //获得源文件下所有目录文件
 67                 List<string> folders = new List<string>(Directory.GetDirectories(sourcePath));                
 68                 folders.ForEach(c =>
 69                 {
 70                     string destDir = Path.Combine(new string[] { destPath, Path.GetFileName(c) });
 71                     //采用递归的方法实现
 72                     CopyFolder(c, destDir);
 73                 });                
 74             }
 75             else
 76             {
 77                 throw new DirectoryNotFoundException("源目录不存在!");
 78             }            
 79         }
 80 
 81         /// <summary>
 82         /// 移动文件夹中的所有文件夹与文件到另一个文件夹
 83         /// </summary>
 84         /// <param name="sourcePath">源文件夹</param>
 85         /// <param name="destPath">目标文件夹</param>
 86         public static void MoveFolder(string sourcePath, string destPath)
 87         {
 88             if (Directory.Exists(sourcePath))
 89             {
 90                 if (!Directory.Exists(destPath))
 91                 {
 92                     //目标目录不存在则创建
 93                     try
 94                     {
 95                         Directory.CreateDirectory(destPath);
 96                     }
 97                     catch (Exception ex)
 98                     {
 99                         throw new Exception("创建目标目录失败:" + ex.Message);
100                     }
101                 }
102                 //获得源文件下所有文件
103                 List<string> files = new List<string>(Directory.GetFiles(sourcePath));
104                 files.ForEach(c =>
105                 {
106                     string destFile = Path.Combine(new string[] { destPath, Path.GetFileName(c) });
107                     //覆盖模式
108                     if (File.Exists(destFile))
109                     {
110                         File.Delete(destFile);
111                     }
112                     File.Move(c, destFile);
113                 });
114                 //获得源文件下所有目录文件
115                 List<string> folders = new List<string>(Directory.GetDirectories(sourcePath));
116 
117                 folders.ForEach(c =>
118                 {
119                     string destDir = Path.Combine(new string[] { destPath, Path.GetFileName(c) });
120                     //Directory.Move必须要在同一个根目录下移动才有效,不能在不同卷中移动。
121                     //Directory.Move(c, destDir);
122 
123                     //采用递归的方法实现
124                     MoveFolder(c, destDir);
125                 });
126             }
127             else
128             {
129                 throw new DirectoryNotFoundException("源目录不存在!");
130             }
131         }
132 
133         #region 删除指定目录下所有内容
134         /// <summary>
135         /// 删除指定目录下所有内容:方法一--删除目录,再创建空目录
136         /// </summary>
137         /// <param name="dirPath"></param>
138         public static void DeleteFolderEx(string dirPath)
139         {
140             if (Directory.Exists(dirPath))
141             {
142                 Directory.Delete(dirPath);
143                 Directory.CreateDirectory(dirPath);
144             }
145         }
146 
147         /// <summary>
148         /// 删除指定目录下所有内容:方法二--找到所有文件和子文件夹删除
149         /// </summary>
150         /// <param name="dirPath"></param>
151         public static void DeleteFolder(string dirPath)
152         {
153             if (Directory.Exists(dirPath))
154             {
155                 foreach (string content in Directory.GetFileSystemEntries(dirPath))
156                 {
157                     if (Directory.Exists(content))
158                     {
159                         Directory.Delete(content, true);
160                     }
161                     else if (File.Exists(content))
162                     {
163                         File.Delete(content);
164                     }
165                 }
166             }
167         }
168         #endregion
169         #endregion        
170     }
171 }

 

测试:

  1 /******************************************************************
  2  * 创 建 人:  SamWang
  3  * 创建时间:  2012-5-9 16:59
  4  * 描    述:
  5  *             用于测试文件操作
  6  * 版    本:  V1.0      
  7  * 修 改 人: 
  8  * 修改内容:
  9  * 版    本:
 10 ******************************************************************/
 11 using System;
 12 using System.Collections.Generic;
 13 using System.Linq;
 14 using System.Text;
 15 using System.IO;
 16 
 17 namespace TestFileOperate
 18 {
 19     class Program
 20     {
 21         static void Main(string[] args)
 22         {
 23             string dirPath = @"D:\TestDir";
 24             string filePath = @"D:\TestDir\TestFile.txt";
 25             //创建文件夹 
 26             Directory.CreateDirectory(dirPath);
 27             //创建文件
 28             using (File.Create(@"D:\TestDir\TestFile.txt")) ;
 29             //删除文件
 30             if (File.Exists(filePath))
 31             {
 32                 File.Delete(filePath);
 33             }
 34             //删除文件夹
 35             //Directory.Delete(dirPath); //删除空目录,否则需捕获指定异常处理
 36             Directory.Delete(dirPath, true);//删除该目录以及其所有内容
 37 
 38             #region 删除指定目录下所有文件夹和文件
 39             #region 准备数据
 40             Directory.CreateDirectory(dirPath);
 41             using (File.Create(dirPath + @"\test001.txt")) ;
 42             Directory.CreateDirectory(dirPath + @"\TestDir001");
 43             using (File.Create(dirPath + @"\TestDir001\test002.txt")) ;
 44             #endregion
 45             FileOperte.DeleteFolder(dirPath);
 46             #endregion
 47 
 48             #region 写入文件
 49             Console.WriteLine("<<<<<<<<<<<{0}>>>>>>>>>>", "WriteFile");
 50 
 51             //WriteAllLines
 52             File.WriteAllLines(filePath, new string[] { "11111", "22222", "3333" });
 53             File.Delete(filePath);
 54 
 55             //WriteAllText
 56             File.WriteAllText(filePath, "11111\r\n22222\r\n3333\r\n");
 57             File.Delete(filePath);
 58 
 59             //StreamWriter
 60             using (StreamWriter sw = new StreamWriter(filePath))
 61             {
 62                 sw.Write("11111\r\n22222\r\n3333\r\n");
 63                 sw.Flush();
 64             }
 65             #endregion
 66 
 67             #region 读取文件
 68             Console.WriteLine("<<<<<<<<<<<{0}>>>>>>>>>>", "ReadFile");
 69             //ReadAllLines
 70             Console.WriteLine("--{0}", "ReadAllLines");
 71             List<string> list = new List<string>(File.ReadAllLines(filePath));
 72             list.ForEach(str =>
 73             {
 74                 Console.WriteLine(str);
 75             });
 76 
 77             //ReadAllText
 78             Console.WriteLine("--{0}", "ReadAllLines");
 79             string fileContent = File.ReadAllText(filePath);
 80             Console.WriteLine(fileContent);
 81 
 82             //StreamReader
 83             Console.WriteLine("--{0}", "StreamReader");
 84             using (StreamReader sr = new StreamReader(filePath))
 85             {
 86                 //方法一:从流的当前位置到末尾读取流
 87                 fileContent = string.Empty;
 88                 fileContent = sr.ReadToEnd();
 89                 Console.WriteLine(fileContent);
 90                 //方法二:一行行读取直至为NULL
 91                 fileContent = string.Empty;
 92                 string strLine = string.Empty;
 93                 while (strLine != null)
 94                 {
 95                     strLine = sr.ReadLine();
 96                     fileContent += strLine + "\r\n";
 97                 }
 98                 Console.WriteLine(fileContent);
 99             }
100 
101             #endregion
102 
103             #region 文件路径
104             dirPath = @"D:\TestDir";
105             filePath = @"D:\TestDir\TestFile.txt";
106             Console.WriteLine("<<<<<<<<<<<{0}>>>>>>>>>>", "文件路径");
107             //获得当前路径
108             Console.WriteLine(Environment.CurrentDirectory);
109             //文件或文件夹所在目录
110             Console.WriteLine(Path.GetDirectoryName(filePath));     //D:\TestDir
111             Console.WriteLine(Path.GetDirectoryName(dirPath));      //D:\
112             //文件扩展名
113             Console.WriteLine(Path.GetExtension(filePath));         //.txt
114             //文件名
115             Console.WriteLine(Path.GetFileName(filePath));          //TestFile.txt
116             Console.WriteLine(Path.GetFileName(dirPath));           //TestDir
117             Console.WriteLine(Path.GetFileNameWithoutExtension(filePath)); //TestFile
118             //绝对路径
119             Console.WriteLine(Path.GetFullPath(filePath));          //D:\TestDir\TestFile.txt
120             Console.WriteLine(Path.GetFullPath(dirPath));           //D:\TestDir  
121             //更改扩展名
122             Console.WriteLine(Path.ChangeExtension(filePath, ".jpg"));//D:\TestDir\TestFile.jpg
123             //根目录
124             Console.WriteLine(Path.GetPathRoot(dirPath));           //D:\      
125             //生成路径
126             Console.WriteLine(Path.Combine(new string[] { @"D:\", "BaseDir", "SubDir", "TestFile.txt" })); //D:\BaseDir\SubDir\TestFile.txt
127             //生成随即文件夹名或文件名
128             Console.WriteLine(Path.GetRandomFileName());
129             //创建磁盘上唯一命名的零字节的临时文件并返回该文件的完整路径
130             Console.WriteLine(Path.GetTempFileName());
131             //返回当前系统的临时文件夹的路径
132             Console.WriteLine(Path.GetTempPath());
133             //文件名中无效字符
134             Console.WriteLine(Path.GetInvalidFileNameChars());
135             //路径中无效字符
136             Console.WriteLine(Path.GetInvalidPathChars());           
137 
138             #endregion
139 
140             #region 文件加解密
141             #region 数据准备
142             //File.WriteAllLines(filePath, new string[] { "11111", "22222", "3333" });
143             File.Encrypt(filePath);
144             Console.WriteLine(File.ReadAllText(filePath));
145             #endregion
146             
147             #endregion
148 
149             #region 文件属性
150             Console.WriteLine("<<<<<<<<<<<{0}>>>>>>>>>>", "文件属性");
151 
152             //use File class
153             Console.WriteLine(File.GetAttributes(filePath));
154             File.SetAttributes(filePath,FileAttributes.Hidden | FileAttributes.ReadOnly);
155             Console.WriteLine(File.GetAttributes(filePath));
156 
157             //user FilInfo class
158             FileInfo fi = new FileInfo(filePath);
159             Console.WriteLine(fi.Attributes.ToString());
160             fi.Attributes = FileAttributes.Hidden | FileAttributes.ReadOnly; //隐藏与只读
161             Console.WriteLine(fi.Attributes.ToString());
162 
163             //只读与系统属性,删除时会提示拒绝访问
164             fi.Attributes = FileAttributes.Archive;
165             Console.WriteLine(fi.Attributes.ToString());
166             #endregion
167 
168             #region 文件移动
169             #region 准备数据
170             Directory.CreateDirectory(dirPath);
171             using (File.Create(dirPath + @"\test001.txt")) ;
172             Directory.CreateDirectory(dirPath + @"\TestDir001");
173             using (File.Create(dirPath + @"\TestDir001\test002.txt")) ;
174             #endregion
175             //拷贝文件夹
176             FileOperte.CopyFolder(dirPath, @"C:\Test");
177             //移动文件夹中的所有文件夹与文件到另一个文件夹
178             FileOperte.MoveFolder(dirPath, @"C:\Test");         
179             #endregion
180         }
181     }
182 }

 

 

作者:SamWang
出处:http://wangshenhe.cnblogs.com/
本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

 

posted on 2012-05-09 16:59  SamWang  阅读(2113)  评论(2编辑  收藏  举报