操作文件

将指定文件夹中的文件大小、文件名称以及最后修改时间,并将记录到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

原文地址:https://www.cnblogs.com/alixee/p/3942161.html