大家好,背景:
我正在使用C#和OpenFileDialog,FileBrowserDialog开发一个WinForms应用程序,它将使用命令行可执行文件将多个文件从excel转换为1个csv文件。

错误:应该添加哪些使用指令或程序集引用以防止这些错误?

  • ' sOut '在当前上下文中不存在
  • ' sErr '在当前上下文中不存在
  • ' sourceFileOpenFileDialog.SelectedFiles '不包含'SelectedFiles'的定义,也没有找到接受类型为system.windows.forms.openfiledialog的第一个arg的扩展方法(您是否缺少使用指令或程序集引用?)
  • ' sourceFileOpenFileDialog.SelectedPath '不包含'SelectedPath'的定义,也没有找到接受类型为system.windows.forms.openfiledialog的第一个arg的扩展方法(您是否缺少使用指令或程序集引用?)
  • ' SecurityException '未找到(您是否缺少using指令或程序集引用?)
  • 找不到
  • '进程(您是否缺少using指令或程序集引用?)
  • 找不到
  • '文件名(您是否缺少using指令或程序集引用?)
  • ' sourceFileOpenFileDialog.FileNames '无法将类型'string []'隐式转换为'string'

  • 谢谢!

    这是MainForm.CS文件中的代码:
        using System;
        using System.ComponentModel;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using System.Threading;
        using System.IO;
        using System.Diagnostics;
        using System.Security;
    
        // Select Source Files Button
        private void sourceFiles_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
    
            this.sourceFileOpenFileDialog.InitialDirectory = "i:\\CommissisionReconciliation\\Review\\";
            this.sourceFileOpenFileDialog.Filter = "Excel Files (*.xls;*.xlsx;)|*.xls;*.xlsx;|All Files (*.*)|*.*";
            this.sourceFileOpenFileDialog.FilterIndex = 2;
            this.sourceFileOpenFileDialog.RestoreDirectory = true;
            this.sourceFileOpenFileDialog.Multiselect = true;
            this.sourceFileOpenFileDialog.Title = "Excel File Browser";
    
            DialogResult dr = this.sourceFileOpenFileDialog.ShowDialog();
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                string consolidatedFolder = targetFolderBrowserDialog.SelectedPath;
                // Read the files
                foreach (String file in sourceFileOpenFileDialog.FileNames)
                {
                    try
                    {
                        // Copy each selected xlsx files into the specified TargetFolder
    
                        System.IO.File.Copy(fileName, consolidatedFolder + @"\" + System.IO.Path.GetFileName(fileName));
    
                        // Convert each selected XLSX File to CSV Using the command prompt
                        // [I:\CommissisionReconciliation\App\ConvertExcel\ConvertExcelTo.exe ^ .XLS file location ^ filename.csv]
                        // example: ConvertExcelTo.exe ^ I:\CommissisionReconciliation\ Review\_Consolidated\ALH\2011-350-00-600070-
                        // 03-09alh-AMLHS of Florida.xlsx ^ 2011-350-00-600070-03-09alh-AMLHS of Florida.csv
    
                        Process convertFilesProcess = new Process();
    
                        // command prompt execution
                        convertFilesProcess.StartInfo.WorkingDirectory = "I:\\CommissisionReconciliation\\App\\ConvertExcel\\";
                        convertFilesProcess.StartInfo.FileName = "ConvertExcelTo.exe";
                        convertFilesProcess.StartInfo.Arguments = " ^ " + targetFolderBrowserDialog.SelectedPath + "^" + csvFileName + ".csv";
                        convertFilesProcess.StartInfo.UseShellExecute = true;
                        convertFilesProcess.StartInfo.CreateNoWindow = true;
                        convertFilesProcess.StartInfo.RedirectStandardOutput = true;
                        convertFilesProcess.StartInfo.RedirectStandardError = true;
                        convertFilesProcess.Start();
    
                        StreamReader sOut = convertFilesProcess.StandardOutput;
                        StreamReader sErr = convertFilesProcess.StandardError;
    
                    }
    
                    catch (SecurityException ex)
                    {
                        // The user lacks appropriate permissions to read files, discover paths, etc.
                        MessageBox.Show("Security error. The user lacks appropriate permissions to read files, discover paths, etc. Please contact your administrator for details.\n\n" +
                        "Error message: " + ex.Message + "\n\n" +);
                    }
                    catch (Exception ex)
                    {
                        // Could not load the image - probably related to Windows file system permissions.
                        MessageBox.Show("Cannot display the image: " + file.Substring(file.LastIndexOf('\\'))
                         + ". You may not have permission to read the file, or " +
                         "it may be corrupt.\n\nReported error: " + ex.Message);
                    }
    
                    finally
                    {
                        Stream sOut
                        .Close();
                        sErr.Close();
                    }
    
                    try
                    {
                        // Combine all .csv files into 1 csv file using the command prompt
                        // [.csv File location: Copy *.csv ^ filename.csv]
                        // example: [.CSV I:\CommissisionReconciliation\ Review\_Consolidated\ALH\: Copy *.csv
                        // ^2011-350-00-600070-03-09alh-AMLHS of Florida.csv)
    
                        Process consolidateFilesProcess = new Process();
    
                        // substring function to take off the extension from sourceFileOpenFileDialog.FileName
                        // int csvFileName.Length = sourceFileOpenFileDialog.FileName.Length - 3;
    
                        consolidateFilesProcess.StartInfo.WorkingDirectory = "I:\\CommissisionReconciliation\\App\\ConvertExcel\\";
                        consolidateFilesProcess.StartInfo.FileName = "ConvertExcelTo.exe";
                        consolidateFilesProcess.StartInfo.Arguments = " .CSV " + " ^ " + targetFolderBrowserDialog.SelectedPath + ": Copy *.csv ^" + csvFileName+ ".csv";
                        consolidateFilesProcess.StartInfo.UseShellExecute = false;
                        consolidateFilesProcess.StartInfo.CreateNoWindow = true;
                        consolidateFilesProcess.StartInfo.RedirectStandardOutput = true;
                        consolidateFilesProcess.StartInfo.RedirectStandardError = true;
                        consolidateFilesProcess.Start();
    
                        StreamReader sOut = consolidateFilesProcess.StandardOutput;
                        StreamReader sErr = consolidateFilesProcess.StandardError;
                    }
    
                    catch (SecurityException ex)
                    {
                        // The user lacks appropriate permissions to read files, discover paths, etc.
                        MessageBox.Show("Security error. The user lacks appropriate permissions to read files, discover paths, etc. Please contact your administrator for details.\n\n" +
                        "Error message: " + ex.Message + "\n\n" +);
                    }
                    catch (Exception ex)
                    {
                        // Could not load the image - probably related to Windows file system permissions.
                        MessageBox.Show("Cannot display the image: " + file.Substring(file.LastIndexOf('\\'))
                         + ". You may not have permission to read the file, or " +
                         "it may be corrupt.\n\nReported error: " + ex.Message);
                    }
    
                    finally
                    {
                        sOut.Close();
                        sErr.Close();
                    }
    
                } // ends foreach (String file in openFileDialog1.FileNames)
            }  // ends if (dr == System.Windows.Forms.DialogResult.OK)
    
    
            if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = sourceFileOpenFileDialog.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            textBoxSourceFiles.Text = sourceFileOpenFileDialog.FileNames;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
    
            if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                Log("Source Files: " + sourceFileOpenFileDialog.SelectedFiles);
            }
            textBoxSourceFiles.Text = sourceFileOpenFileDialog.SelectedFiles;
        } // ends selectFilesButton_Click method
    
    
        // Source Folder Path Click Button
    

    最佳答案

    解决您的错误

    sourceFileOpenFileDialog.FileNames 无法将类型'string []'隐式转换为'string'

    您需要更改本节,您正在尝试将字符串数组 push 字符串(.Text)

    using (myStream)
    {
       // change FileNames to FileName
       textBoxSourceFiles.Text = sourceFileOpenFileDialog.FileName;
    
    }
    

    也许遍历FileNames数组并将字符串连接在一起以放入.Text?

    对于“.SelectedFiles”和“.SelectedPath”的问题,这些不是openFileDialog的属性,因此这就是抱怨的原因。

    同样,您可以使用“.FileNames”获取在对话框中选择的文件(如果只允许一个选择,则可以使用“.FileName”)

    使用 sOut sErr 可以在过程的后期设置它们,并在您的finally语句中清理它们,这可能是发生的,如果该过程在您到达目标位置之前爆炸了
    StreamReader sOut = covertFilesProcess.StandardOutput;
    StreamReader sErr = covertFilesProcess.StandardError;
    

    然后,当您敲到最后几行时,由于尚未制作完成,所以不知道要关闭的 sOut sErr 是什么。

    09-04 17:46
    查看更多