文件与文件夹操作主要用到以下几个类:

  1.File类:  

提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。

    msdn:http://msdn.microsoft.com/zh-cn/library/system.io.file(v=VS.80).aspx

  2.FileInfo类:

    提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象

    msdn:http://msdn.microsoft.com/zh-cn/library/system.io.fileinfo(v=VS.80).aspx

  3.Directory类:

    公开用于创建、移动和枚举通过目录和子目录的静态方法。

    msdn:http://msdn.microsoft.com/zh-cn/library/system.io.directory.aspx

  4.DirectoryInfo类:

    公开用于创建、移动和枚举目录和子目录的实例方法。

    msdn:http://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo.aspx

  (注:以下出现的dirPath表示文件夹路径,filePath表示文件路径)

1.创建文件夹  

Directory.CreateDirectory(@"D:\TestDir");

2.创建文件

  创建文件会出现文件被访问,以至于无法删除以及编辑。建议用上using。

using (File.Create(@"D:\TestDir\TestFile.txt"));

3.删除文件    删除文件时,最好先判断该文件是否存在!

if (File.Exists(filePath))
{
File.Delete(filePath);
}

4.删除文件夹

  删除文件夹需要对异常进行处理。可捕获指定的异常。msdn:http://msdn.microsoft.com/zh-cn/library/62t64db3(v=VS.80).aspx

Directory.Delete(dirPath); //删除空目录,否则需捕获指定异常处理
Directory.Delete(dirPath, true);//删除该目录以及其所有内容

5.删除指定目录下所有的文件和文件夹

  一般有两种方法:1.删除目录后,创建空目录 2.找出下层文件和文件夹路径迭代删除

 1         /// <summary>
2 /// 删除指定目录下所有内容:方法一--删除目录,再创建空目录
3 /// </summary>
4 /// <param name="dirPath"></param>
5 public static void DeleteDirectoryContentEx(string dirPath)
6 {
7 if (Directory.Exists(dirPath))
8 {
9 Directory.Delete(dirPath);
10 Directory.CreateDirectory(dirPath);
11 }
12 }
13
14 /// <summary>
15 /// 删除指定目录下所有内容:方法二--找到所有文件和子文件夹删除
16 /// </summary>
17 /// <param name="dirPath"></param>
18 public static void DeleteDirectoryContent(string dirPath)
19 {
20 if (Directory.Exists(dirPath))
21 {
22 foreach (string content in Directory.GetFileSystemEntries(dirPath))
23 {
24 if (Directory.Exists(content))
25 {
26 Directory.Delete(content, true);
27 }
28 else if (File.Exists(content))
29 {
30 File.Delete(content);
31 }
32 }
33 }
34 }

6.读取文件

  读取文件方法很多,File类已经封装了四种:

  一、直接使用File类

    1.public static string ReadAllText(string path); 

    2.public static string[] ReadAllLines(string path);

    3.public static IEnumerable<string> ReadLines(string path);

    4.public static byte[] ReadAllBytes(string path);

    以上获得内容是一样的,只是返回类型不同罢了,根据自己需要调用。

  

  二、利用流读取文件

    分别有StreamReader和FileStream。详细内容请看代码。  

 1             //ReadAllLines
2 Console.WriteLine("--{0}", "ReadAllLines");
3 List<string> list = new List<string>(File.ReadAllLines(filePath));
4 list.ForEach(str =>
5 {
6 Console.WriteLine(str);
7 });
8
9 //ReadAllText
10 Console.WriteLine("--{0}", "ReadAllLines");
11 string fileContent = File.ReadAllText(filePath);
12 Console.WriteLine(fileContent);
13
14 //StreamReader
15 Console.WriteLine("--{0}", "StreamReader");
16 using (StreamReader sr = new StreamReader(filePath))
17 {
18 //方法一:从流的当前位置到末尾读取流
19 fileContent = string.Empty;
20 fileContent = sr.ReadToEnd();
21 Console.WriteLine(fileContent);
22 //方法二:一行行读取直至为NULL
23 fileContent = string.Empty;
24 string strLine = string.Empty;
25 while (strLine != null)
26 {
27 strLine = sr.ReadLine();
28 fileContent += strLine+"\r\n";
29 }
30 Console.WriteLine(fileContent);
31 }

   

7.写入文件

  写文件内容与读取文件类似,请参考读取文件说明。

 1             //WriteAllLines
2 File.WriteAllLines(filePath,new string[]{"11111","22222","3333"});
3 File.Delete(filePath);
4
5 //WriteAllText
6 File.WriteAllText(filePath, "11111\r\n22222\r\n3333\r\n");
7 File.Delete(filePath);
8
9 //StreamWriter
10 using (StreamWriter sw = new StreamWriter(filePath))
11 {
12 sw.Write("11111\r\n22222\r\n3333\r\n");
13 sw.Flush();
14 }

9.文件路径

  文件和文件夹的路径操作都在Path类中。另外还可以用Environment类,里面包含环境和程序的信息。

 1             string dirPath = @"D:\TestDir";
2 string filePath = @"D:\TestDir\TestFile.txt";
3 Console.WriteLine("<<<<<<<<<<<{0}>>>>>>>>>>", "文件路径");
4 //获得当前路径
5 Console.WriteLine(Environment.CurrentDirectory);
6 //文件或文件夹所在目录
7 Console.WriteLine(Path.GetDirectoryName(filePath)); //D:\TestDir
8 Console.WriteLine(Path.GetDirectoryName(dirPath)); //D:\
9 //文件扩展名
10 Console.WriteLine(Path.GetExtension(filePath)); //.txt
11 //文件名
12 Console.WriteLine(Path.GetFileName(filePath)); //TestFile.txt
13 Console.WriteLine(Path.GetFileName(dirPath)); //TestDir
14 Console.WriteLine(Path.GetFileNameWithoutExtension(filePath)); //TestFile
15 //绝对路径
16 Console.WriteLine(Path.GetFullPath(filePath)); //D:\TestDir\TestFile.txt
17 Console.WriteLine(Path.GetFullPath(dirPath)); //D:\TestDir
18 //更改扩展名
19 Console.WriteLine(Path.ChangeExtension(filePath, ".jpg"));//D:\TestDir\TestFile.jpg
20 //根目录
21 Console.WriteLine(Path.GetPathRoot(dirPath)); //D:\
22 //生成路径
23 Console.WriteLine(Path.Combine(new string[] { @"D:\", "BaseDir", "SubDir", "TestFile.txt" })); //D:\BaseDir\SubDir\TestFile.txt
24 //生成随即文件夹名或文件名
25 Console.WriteLine(Path.GetRandomFileName());
26 //创建磁盘上唯一命名的零字节的临时文件并返回该文件的完整路径
27 Console.WriteLine(Path.GetTempFileName());
28 //返回当前系统的临时文件夹的路径
29 Console.WriteLine(Path.GetTempPath());
30 //文件名中无效字符
31 Console.WriteLine(Path.GetInvalidFileNameChars());
32 //路径中无效字符
33 Console.WriteLine(Path.GetInvalidPathChars());

10.文件属性操作  

  File类与FileInfo都能实现。静态方法与实例化方法的区别!

 1             //use File class
2 Console.WriteLine(File.GetAttributes(filePath));
3 File.SetAttributes(filePath,FileAttributes.Hidden | FileAttributes.ReadOnly);
4 Console.WriteLine(File.GetAttributes(filePath));
5
6 //user FilInfo class
7 FileInfo fi = new FileInfo(filePath);
8 Console.WriteLine(fi.Attributes.ToString());
9 fi.Attributes = FileAttributes.Hidden | FileAttributes.ReadOnly; //隐藏与只读
10 Console.WriteLine(fi.Attributes.ToString());
11
12 //只读与系统属性,删除时会提示拒绝访问
13 fi.Attributes = FileAttributes.Archive;
14 Console.WriteLine(fi.Attributes.ToString());

 11.移动文件夹中的所有文件夹与文件到另一个文件夹

  如果是在同一个盘符中移动,则直接调用Directory.Move的方法即可!跨盘符则使用下面递归的方法!

 1         /// <summary>
2 /// 移动文件夹中的所有文件夹与文件到另一个文件夹
3 /// </summary>
4 /// <param name="sourcePath">源文件夹</param>
5 /// <param name="destPath">目标文件夹</param>
6 public static void MoveFolder(string sourcePath,string destPath)
7 {
8 if (Directory.Exists(sourcePath))
9 {
10 if (!Directory.Exists(destPath))
11 {
12 //目标目录不存在则创建
13 try
14 {
15 Directory.CreateDirectory(destPath);
16 }
17 catch (Exception ex)
18 {
19 throw new Exception("创建目标目录失败:" + ex.Message);
20 }
21 }
22 //获得源文件下所有文件
23 List<string> files = new List<string>(Directory.GetFiles(sourcePath));
24 files.ForEach(c =>
25 {
26 string destFile = Path.Combine(new string[]{destPath,Path.GetFileName(c)});
27 //覆盖模式
28 if (File.Exists(destFile))
29 {
30 File.Delete(destFile);
31 }
32 File.Move(c, destFile);
33 });
34 //获得源文件下所有目录文件
35 List<string> folders = new List<string>(Directory.GetDirectories(sourcePath));
36
37 folders.ForEach(c =>
38 {
39 string destDir = Path.Combine(new string[] { destPath, Path.GetFileName(c) });
40 //Directory.Move必须要在同一个根目录下移动才有效,不能在不同卷中移动。
41 //Directory.Move(c, destDir);
42
43 //采用递归的方法实现
44 MoveFolder(c, destDir);
45 });
46 }
47 else
48 {
49 throw new DirectoryNotFoundException("源目录不存在!");
50 }
51 }

12.复制文件夹中的所有文件夹与文件到另一个文件夹

  如果是需要移动指定类型的文件或者包含某些字符的目录,只需在Directory.GetFiles中加上查询条件即可!

 1         /// <summary>
2 /// 复制文件夹中的所有文件夹与文件到另一个文件夹
3 /// </summary>
4 /// <param name="sourcePath">源文件夹</param>
5 /// <param name="destPath">目标文件夹</param>
6 public static void CopyFolder(string sourcePath,string destPath)
7 {
8 if (Directory.Exists(sourcePath))
9 {
10 if (!Directory.Exists(destPath))
11 {
12 //目标目录不存在则创建
13 try
14 {
15 Directory.CreateDirectory(destPath);
16 }
17 catch (Exception ex)
18 {
19 throw new Exception("创建目标目录失败:" + ex.Message);
20 }
21 }
22 //获得源文件下所有文件
23 List<string> files = new List<string>(Directory.GetFiles(sourcePath));
24 files.ForEach(c =>
25 {
26 string destFile = Path.Combine(new string[]{destPath,Path.GetFileName(c)});
27 File.Copy(c, destFile,true);//覆盖模式
28 });
29 //获得源文件下所有目录文件
30 List<string> folders = new List<string>(Directory.GetDirectories(sourcePath));
31 folders.ForEach(c =>
32 {
33 string destDir = Path.Combine(new string[] { destPath, Path.GetFileName(c) });
34 //采用递归的方法实现
35 CopyFolder(c, destDir);
36 });
37 }
38 else
39 {
40 throw new DirectoryNotFoundException("源目录不存在!");
41 }
42 }

总结:

  有关文件的操作的内容非常多,不过几乎都是从上面的这些基础方法中演化出来的。比如对内容的修改,不外乎就是加上点字符串操作或者流操作。还有其它一些特别的内容,等在开发项目中具体遇到后再添加。

【整理】C#文件操作大全(SamWang)<转>的更多相关文章

  1. 【整理】C#文件操作大全(SamWang)

    [整理]C#文件操作大全(SamWang) 文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msd ...

  2. Java 文件操作大全

    Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...

  3. Python文件操作大全

    Python 编程文件操作大全   文件打开模式 打开模式 执行操作 'r' 以只读方式打开文件(默认) 'w' 以写入的方式打开文件,会覆盖已存在的文件 'x' 如果文件已经存在,使用此模式打开将引 ...

  4. node.js整理 02文件操作-常用API

    NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...

  5. go文件操作大全

    参考Go官方库的文件操作分散在多个包中,比如os.ioutil包,我本来想写一篇总结性的Go文件操作的文章,却发现已经有人2015年已经写了一篇这样的文章,写的非常好,所以我翻译成了中文,强烈推荐你阅 ...

  6. makefile文件操作大全

     Makefile的规则 -- 转自 :http://blog.csdn.net/ruglcc/article/details/7814546/ 在讲述这个Makefile之前,还是让我们先来粗略地看 ...

  7. 转:关于python文件操作大全

    转自:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html python中对文件.文件夹(文件操作函数)的操作需要涉及到o ...

  8. Java文件操作大全

    //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.exists()) ...

  9. C、C++文件操作大全

    基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作  这种方式的文件操作有一个重要的结构FILE,FILE在stdio ...

随机推荐

  1. C#中ref,out

    out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字 比如 ...

  2. 此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist

    此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist

  3. CE STEPLDR

    作用:初始化CPU.内存.Flash,复制EBoot到内存并跳入EBoot中运行. 原理:S3C2416有 8-KB 的steppingstone(暂时翻译为垫脚石),在Nand启动模式下可把Nand ...

  4. Debian普通用户获取root权限|sudo的安装与配置

    Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux ...

  5. pwnable echo1

    最近忙的好久没有更新了,有空把之前拿来练手的CTF pwn题逐渐整理一下放出来 题目是 linux 64位程序 ,流程很简单,大致思路就是先把一个跳转的机器指令写进name的地址,然后溢出覆盖eip, ...

  6. Linux-awk直接修改原文件

    #注意:重定向符号后面的文件名需要加双引号 awk '{print > "file"}' file

  7. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  8. Oracle定时计划快速使用

    Oracle定时计划快速使用 前言: SQL Server中有相关的定时计划,可以直接打开sql server 的任务管理器进行配置,可以方便.快速实现定时执行相应任务.相应的Oracle也有对应的定 ...

  9. div加边框

    一.虚线与实线边框 边框虚线样式:dashed 边框实现样式:solid border:1px dashed #000 代表设置对象边框宽度为1px黑色虚线边框 border:1px solid #0 ...

  10. (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about t

    运行redis过程中,突然报错如下: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not a ...