проблема с «диалогом браузера файлов» при объединении файлов

В настоящее время у меня есть диалоговое окно браузера, которое открывается и позволяет пользователю выбрать папку, в которой файлы doc/docx будут объединены в один файл. На данный момент он настроен на объединение файлов после закрытия кнопки «DialogResult.ok» в диалоговом окне браузера. как показано ниже:

private void browseButton_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog diagBrowser = new FolderBrowserDialog();
        diagBrowser.Description = "Select a folder which contains files needing combined...";

        // Default folder, altered when the user selects folder of choice 
        string selectedFolder = @"C:\";
        diagBrowser.SelectedPath = selectedFolder;

        // initial file path display
        folderPath.Text = diagBrowser.SelectedPath;

        if (DialogResult.OK == diagBrowser.ShowDialog())
        {
            // Grab the folder that was chosen
            selectedFolder = diagBrowser.SelectedPath;
            folderPath.Text = diagBrowser.SelectedPath;
    }

    private void combineButton_Click(object sender, EventArgs e)
    {

           string[] AllDocFolder = Directory.GetFiles(selectedFolder, "*.doc");
           string outputFileName = (@"C:\Test\Merge\Combined.docx");
           MsWord.Merge(AllDocFolder, outputFileName, true);

            // Message displaying how many files are combined. 
            MessageBox.Show("A total of " + AllDocFolder.Length.ToString() + " documents have been merged", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

    }

проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы «combineButton» объединял документы, а не «DialogResult.ok». Когда я копирую строки:

 string[] AllDocFolder = Directory.GetFiles(selectedFolder, "*.doc");
           string outputFileName = (@"C:\Test\Merge\Combined.docx");
           MsWord.Merge(AllDocFolder, outputFileName, true);

в области CombineButton я получаю сообщение об ошибке: «имя 'selectedFolder' не существует в текущем контексте». Это может быть глупый вопрос, но есть ли быстрый способ исправить это?


c#
person cgraham720    schedule 16.03.2016    source источник
comment
Если вы хотите получить доступ к переменной двумя методами, создайте приватную переменную в классе.   -  person CodeCaster    schedule 16.03.2016
comment
@codecaster - проблема, с которой я столкнулся, заключается в том, что строка «selectedfolder» по умолчанию имеет значение c:\\, однако это меняется, когда пользователь выбирает папку, которую он хочет фактически объединить. я пытаюсь использовать отдельную кнопку, чтобы затем взять этот обновленный путь к файлу и объединить его содержимое, в отличие от папки по умолчанию c:\\   -  person cgraham720    schedule 16.03.2016


Ответы (1)


Насколько я понимаю вашу проблему, вы хотите разделить выбор папки и объединение документов, верно?

Таким образом, вы можете поместить информацию о целевом каталоге в переменную класса:

public class MyForm
{   
    private string[] _sourceFiles;

    private void browseButton_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog diagBrowser = new FolderBrowserDialog();
        diagBrowser.Description = "Select a folder which contains files needing combined...";

        // Default folder, altered when the user selects folder of choice 
        string selectedFolder = @"C:\";
        diagBrowser.SelectedPath = selectedFolder;

        // initial file path display
        folderPath.Text = diagBrowser.SelectedPath;

        if (DialogResult.OK == diagBrowser.ShowDialog())
        {
            // Grab the folder that was chosen
            selectedFolder = diagBrowser.SelectedPath;
            folderPath.Text = diagBrowser.SelectedPath;

            _sourceFiles = Directory.GetFiles(selectedFolder, "*.doc");            
        }
    }

    private void combineButton_Click(object sender, EventArgs e)
    {
        if (_sourceFiles != null && _sourceFiles.Length > 0)
        {
            string outputFileName = (@"C:\Test\Merge\Combined.docx");
            MsWord.Merge(_sourceFiles, outputFileName, true);
            // Message displaying how many files are combined. 
            MessageBox.Show("A total of " + _sourceFiles.Length.ToString() + " documents have been merged", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
person DerApe    schedule 16.03.2016
comment
код работал отлично, однако мне пришлось внести одно изменение. Мне пришлось изменить documentFolder.Length.ToString() на _sourceFiles.Length.ToString(), так как я получал ту же ошибку, что и ранее упомянутая в вопросе. Спасибо за помощь - person cgraham720; 16.03.2016
comment
@cgraham720 ах, извините, это была ошибка копирования и удаления, спасибо за информацию - person DerApe; 16.03.2016