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

}