无法让我的按钮给我的班级打电话

时间:2010-06-28 14:17:41

标签: c#

我有一个Windows窗体应用程序。该应用程序的作用是让用户浏览他们希望重命名文件的驱动器/文件夹。此应用程序重命名具有“无效”字符(在RegEx模式中定义)的文件。

我想在这里发生的是,在用户决定使用哪个驱动器/文件夹之后,会弹出一个datagridview,显示要重命名的驱动器/文件夹中的用户文件。然后,用户单击按钮以实际重命名文件。我在设置DriveRecursion_Results.cs时获取我的按钮代码时遇到了麻烦。有谁能够帮我?代码plz - 我对此非常陌生,需要语法来理解。

Form1代码:

namespace FileMigration2
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        FolderSelect("Please select:");

    }

    public string FolderSelect(string txtPrompt)
    {
        //Value to be returned
        string result = string.Empty;

        //Now, we want to use the path information to population our folder selection initial location
        string initialPathDir = (@"C:\");
        System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(initialPathDir);
        FolderBrowserDialog FolderSelect = new FolderBrowserDialog();
        FolderSelect.SelectedPath = info.FullName;
        FolderSelect.Description = txtPrompt;
        FolderSelect.ShowNewFolderButton = true;

        if (FolderSelect.ShowDialog() == DialogResult.OK)
        {
            string retPath = FolderSelect.SelectedPath;
            if (retPath == null)
            {
                retPath = "";
            }
            DriveRecursion_Results dw = new DriveRecursion_Results();
            dw.Show();
            dw.DriveRecursion(retPath);

            result = retPath;

         }

        return result;

    }





    }
}

DriveRecursion_Results.cs代码:[按钮在这里我需要帮助!]

namespace FileMigration2
{
 public partial class DriveRecursion_Results : Form
{
    public DriveRecursion_Results()
    {
        InitializeComponent();

    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    public void DriveRecursion(string retPath)
    {
        //recurse through files.  Let user press 'ok' to move onto next step        
        // string[] files = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);

        string pattern = " *[\\~#%&*{}/<>?|\"-]+ *";
        //string replacement = "";
        Regex regEx = new Regex(pattern);

        string[] fileDrive = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);
        List<string> filePath = new List<string>();


        dataGridView1.Rows.Clear();
        try
        {
            foreach (string fileNames in fileDrive)
            {

                if (regEx.IsMatch(fileNames))
                {
                    string fileNameOnly = Path.GetFileName(fileNames);
                    string pathOnly = Path.GetDirectoryName(fileNames);

                    DataGridViewRow dgr = new DataGridViewRow();
                    filePath.Add(fileNames);
                    dgr.CreateCells(dataGridView1);
                    dgr.Cells[0].Value = pathOnly;
                    dgr.Cells[1].Value = fileNameOnly;
                    dataGridView1.Rows.Add(dgr);
                    filePath.Add(fileNames);
                }

                else
                {
                    DataGridViewRow dgr2 = new DataGridViewRow();
                    dgr2.Cells[0].Value = "No Files To Clean Up";
                    dgr2.Cells[1].Value = "";
                }

            }
        }
        catch (Exception e)
        {
            StreamWriter sw = new StreamWriter(retPath + "ErrorLog.txt");
            sw.Write(e);

        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        //What do i type in here to call my FileCleanUp method???
    }




}

SanitizeFileNames.cs代码:

namespace FileMigration2
{
   public class SanitizeFileNames
{

    public static void FileCleanup(List<string>filePath)
    {
        string regPattern = "*[\\~#%&*{}/<>?|\"-]+*";
        string replacement = "";
        Regex regExPattern = new Regex(regPattern);


        foreach (string files2 in filePath)
        {
            try
            {
                string filenameOnly = Path.GetFileName(files2);
                string pathOnly = Path.GetDirectoryName(files2);
                string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
                string sanitized = Path.Combine(pathOnly, sanitizedFileName);
                //write to streamwriter
                System.IO.File.Move(files2, sanitized);

            }
            catch (Exception ex)
            { 
            //write to streamwriter

            }

        }

        }

    }
}
    }

感谢任何帮助!

谢谢:)

1 个答案:

答案 0 :(得分:2)

 public partial class DriveRecursion_Results : Form {
    List<string> filePath;

并且在driveRecursion方法中,只需使用

filePath = new List<string>();

并在动作按钮方法中,为什么不这样做

  if(filePath != null)
        SanitizeFileNames.FileCleanup(filePath);
  1. 您拨打filePath.Add两次?

  2. 您的“else”也在错误的位置。

  3. 什么是dgr2