在本人的工作中,经常要用到文件操作,举个例子,经常要从一个目录中获取所有的文件名,或者不同的扩展名的文件,然后将这些文件名建立一个文本文件,以便于读取等操作。还有就是经常性的要对文本进行读写操作,要把一个文本文件里的所有字符串读到一个数组或者集合中,然后把数组或者集合写进文件里。所以这样一些扩展方法将会非常方便的省去写代码的重复工作。
在这里主要演示的是读写,以及获取文件名等。
#region 读一个文件中的内容到List中,返回这个list
/// <summary>
/// 读一个文件中的内容到List中,返回这个list
/// </summary>
/// <param name="openPath">完整路径</param>
/// <returns></returns>
public static List<string> ReadFromFile(this string openPath)
{
List<string> result = new List<string>();
StreamReader sr = new StreamReader(openPath);
while (!sr.EndOfStream)
result.Add(sr.ReadLine());
sr.Close();
return result;
}
#endregion
#region 把一个集合的内容写进文本文件中
/// <summary>
/// 把一个集合的内容写进文本文件中
/// </summary>
/// <param name="savePath">保存结果的文件路径</param>
/// <param name="newResult">需要保存的集合名称</param>
public static void WriteToFile(this string savePath, List<string> newResult)
{
File.WriteAllLines(savePath, newResult);
}
#endregion
#region 读一个目录中所有的文件名列表,结果保存到一个集合中
/// <summary>
/// 读一个目录中所有的文件名列表,结果保存到一个集合中
/// </summary>
/// <param name="openPath">目标文件夹</param>
/// <returns></returns>
public static List<string> ReadFileNameFromDir(this string openPath)
{
DirectoryInfo dires = new DirectoryInfo(openPath);
List<string> FileNameList = new List<string>();
FileInfo[] files = dires.GetFiles();
foreach (FileInfo f in files)
{
FileNameList.Add(f.Name);
}
return FileNameList;
}
#endregion
#region 读一个目录中所有的文件名,并保存到文本文件中
/// <summary>
/// 读一个目录中所有的文件名,并保存到文本文件中
/// </summary>
/// <param name="directoryPath">获取文件名的目标文件夹</param>
/// <param name="savePath">需要保存的文本文件</param>
/// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
/// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
/// <param name="isSearchChild">是否搜索目标文件夹的子文件夹</param>
public static void GetFilesNameAndSave(this string directoryPath, string savePath, string searchPattern, bool isSearchChild)
{
List<string> FileNameList = new List<string>();
string[] fileNameArray;
//如果目录不存在,则抛出异常
if (!IsExistDirectory(directoryPath))
{
throw new FileNotFoundException();
}
try
{
if (isSearchChild)
{
fileNameArray = Directory.GetFiles(directoryPath, searchPattern, SearchOption.AllDirectories);
}
else
{
fileNameArray = Directory.GetFiles(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);
}
}
catch (IOException ex)
{
throw ex;
}
foreach (string s in fileNameArray)
FileNameList.Add(s);
WriteToFile(savePath, FileNameList);
}
#endregion
#region 读一个目录中所有的文件的绝对路径
/// <summary>
/// 读一个目录中所有的文件的绝对路径
/// </summary>
/// <param name="openPath">目标文件夹</param>
/// <returns></returns>
public static List<string> ReadFullPathFromDir(this string openPath)
{
DirectoryInfo dires = new DirectoryInfo(openPath);
List<string> FileNameList = new List<string>();
FileInfo[] files = dires.GetFiles();
foreach (FileInfo f in files)
{
FileNameList.Add(f.FullName);
}
return FileNameList;
}
#endregion
其实个人认为,C#File类和Directory类里的很多方法已经足够用了,只不过使用扩展方法,可以把一些类实例化的过程省略,在频繁的这样的过程中,无疑是能够节省很多时间的。