C# 扩展方法应用二:文件操作

在本人的工作中,经常要用到文件操作,举个例子,经常要从一个目录中获取所有的文件名,或者不同的扩展名的文件,然后将这些文件名建立一个文本文件,以便于读取等操作。还有就是经常性的要对文本进行读写操作,要把一个文本文件里的所有字符串读到一个数组或者集合中,然后把数组或者集合写进文件里。所以这样一些扩展方法将会非常方便的省去写代码的重复工作。


在这里主要演示的是读写,以及获取文件名等。


    #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类里的很多方法已经足够用了,只不过使用扩展方法,可以把一些类实例化的过程省略,在频繁的这样的过程中,无疑是能够节省很多时间的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值