• 操作文件


    将指定文件夹中的文件大小、文件名称以及最后修改时间,并将记录到Excel中。

    private delegate void UpdateControlPropertyDelegate(Control ctrl, string propertyName, params object[] args);
    private UpdateControlPropertyDelegate _updateCtrlPropDelegate = null;
    private DirectoryInfo _workingDirectoryInfo = null;
    private string _searchFilePattern = "*.*";
    public FrmExportMain()
    {
        InitializeComponent();
        this._updateCtrlPropDelegate = new UpdateControlPropertyDelegate(UpdateControlPropertyMethod);
    }
    private void UpdateControlPropertyMethod(Control ctrl, string propertyName, params object[] args)
    {
        if (String.IsNullOrEmpty(propertyName))
        {
            ctrl.Update();
            return;
        }


        if (args == null)return;

        PropertyInfo[] props = ctrl.GetType().GetProperties();
        foreach (PropertyInfo propInfo in props)
        {
            //查找目标控件的属性名称
            if (propInfo.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase))
                propInfo.SetValue(ctrl, args[0], null);
        }
        ctrl.Update();
    }

    /// <summary>
    /// 提取文件信息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnGetFileInfo_Click(object sender, EventArgs e)
    {
        if (System.IO.Directory.Exists(this.txtDirectoryName.Text) == false)
        {
        MessageBox.Show("当前选择的文件夹不存在,请重新选择!");
        return;
        }
        this._workingDirectoryInfo = new DirectoryInfo(this.txtDirectoryName.Text);
        this._searchFilePattern = this.txtSearchPattern.Text;
        this.btnGetFileInfo.Enabled = false;
        this.lblHint.Text = "";
        this.lblHint.Visible = true;
        BackgroundWorker backWorkderGetFileInfo = new System.ComponentModel.BackgroundWorker();
        backWorkderGetFileInfo.DoWork += new DoWorkEventHandler(backWorkderGetFileInfo_DoWork);
        backWorkderGetFileInfo.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backWorkderGetFileInfo_RunWorkerCompleted);
        backWorkderGetFileInfo.RunWorkerAsync();
    }


    private void InvokeUpdateControlProperty(Control ctrl, string propertyName, params object[] args)
    {
        ctrl.Invoke(this._updateCtrlPropDelegate, new object[] { ctrl, propertyName, args });
    }


    private List GetDirectoryFileInfos(DirectoryInfo dirInfo)
    {
        if (dirInfo == null)return null;

        List fileInfoList = new List();
        DirectoryInfo[] subDirs = dirInfo.GetDirectories();
        if (subDirs.Length > 0)
        {
            foreach (DirectoryInfo subDirInfo in subDirs)
            {
                InvokeUpdateControlProperty(this.lblHint, "Text", "正在获取文件夹【" + subDirInfo.Name + "】下文件信息,请稍等......");
                fileInfoList.AddRange(GetDirectoryFileInfos(subDirInfo));
                System.Threading.Thread.Sleep(1);//此句是重中之重,最关键的一句,降低了CPU的性能
            }
        }
        fileInfoList.AddRange(dirInfo.GetFiles(this._searchFilePattern));
        return fileInfoList;
    }


    public string ExcelReportFolderName
    {
        get
        {
            string currentAppPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            string excelPath = Path.Combine(currentAppPath, "Reports");
            if (Directory.Exists(excelPath) == false)
            {
                Directory.CreateDirectory(excelPath);
            }
            return excelPath;
        }
    }


    private void backWorkderGetFileInfo_DoWork(object sender, DoWorkEventArgs e)
    {
        List fileInfoList = GetDirectoryFileInfos(this._workingDirectoryInfo);
        InvokeUpdateControlProperty(this.lblHint, "Text", "正在生成Excel文件信息,请稍等......");
        StringBuilder sb = new StringBuilder();
        int index = 1;
        sb.Append("<html><body><table><tr><td>序号</td><td>文件名</td><td>文件大小</td><td>最后修改时间</td></tr>");

        foreach (FileInfo fileInfo in fileInfoList)
        {
            sb.Append("<tr><td>" + index + "</td><td>" + fileInfo.Name + "</td><td>" + fileInfo.Length + "</td><td>" + fileInfo.LastWriteTime + "</td></tr>");
            index++;
        }
        sb.Append("");

        string excelPath = ExcelReportFolderName;
        string excelFileName = Path.Combine(excelPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
        StreamWriter logWriter = File.CreateText(excelFileName);
        try
        {
            logWriter.WriteLine(sb.ToString());
        }
        finally
        {
            logWriter.Close();
        }
    }


    private void backWorkderGetFileInfo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.lblHint.Visible = false;
        if (e.Error != null)
            MessageBox.Show(e.Error.Message);
        else
            MessageBox.Show("获取文件信息成功!");
        this.btnGetFileInfo.Enabled = true;
    }


    /// <summary>
    /// 选择文件夹
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnSelectDirectory_Click(object sender, EventArgs e)
    {
        this.folderBrowserDialog1.SelectedPath = this.txtDirectoryName.Text;
        if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK)
        {
            this.txtDirectoryName.Text = this.folderBrowserDialog1.SelectedPath;
        }
    }
    /// <summary>
    /// 打开报告文件夹
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnOpenReportFolder_Click(object sender, EventArgs e)
    {
        string filePath = ExcelReportFolderName;
        Process open = new Process();
        open.StartInfo.FileName = "explorer";
        open.StartInfo.Arguments = filePath;
        open.Start();
    }

    源码下载:https://files.cnblogs.com/alixee/ExportFileInfo%28%E4%BC%98%E5%8C%96%E5%90%8E%29.zip

  • 相关阅读:
    (转)dubbo远程调用细节
    (转)Dubbo扩展点实现细节
    (转)dubbo design
    (转) java中try/catch性能和原理
    mybatis入门基础(九)----逆向工程
    客观评价下软件培训机构
    mybatis入门基础(八)-----查询缓存
    mybatis入门基础(七)----延迟加载
    mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
    为什么我不推荐大家去外包公司
  • 原文地址:https://www.cnblogs.com/alixee/p/3942161.html
Copyright © 2020-2023  润新知