【问题标题】:How to specify output directory for .exe in C#如何在 C# 中为 .exe 指定输出目录
【发布时间】:2012-10-12 11:36:07
【问题描述】:

我正在用 C# 开发 wpf 应用程序。我有一个按钮,通过 Microsoft.Win32.OpenFileDialog 浏览文件系统。有一个提交按钮,我在其上调用 Process.Start() 以在 grib 文件上运行 .exe。 exe 成功为我生成了 .csv 文件。首先我浏览文件系统,选择文件,然后单击提交按钮。我的应用程序执行路径是 D:\Projects\ApiRouting\ApiRouting\bin\Debug。我的应用程序中有一个文件夹位于 D:\Projects\ApiRouting\ApiRouting\Files。当我从路径 D:\Projects\ApiRouting\ApiRouting\Files 中选择文件并单击提交按钮时,.csv 文件将在 D:\Projects\ApiRouting\ApiRouting\Files 生成,这是正确的。当我从 D:\Documents 中选择文件并单击提交按钮时,会在 D:\Documents 中生成 .csv 文件。我运行.exe的代码如下

 public static void GenerateCsvFile(string fileName)
        {

                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
                startInfo.Arguments = @"" + fileName + "" +" -C -msg 1 -Csv";
                startInfo.UseShellExecute = true;
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
                process.Close();

                System.Diagnostics.Process process1 = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo1 = new System.Diagnostics.ProcessStartInfo();
                startInfo1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo1.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
                startInfo1.Arguments = @"" + fileName + "" + " -C -msg all -nMet -Csv";
                startInfo1.UseShellExecute = true;
                process1.StartInfo = startInfo1;
                process1.Start();
                process1.WaitForExit();
                process1.Close();

        }


private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            safeFileName = string.Empty;
            // Create OpenFileDialog
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            // Set filter for file extension and default file extension
            //dlg.DefaultExt = ".txt";
            //dlg.Filter = "Zip Files|*.zip*";
            dlg.Multiselect = false;
            // Display OpenFileDialog by calling ShowDialog method
            Nullable<bool> result = dlg.ShowDialog();

            // Get the selected file name and display in a TextBox
            if (result == true)
            {
                FileNameTextBox.Text = string.Empty;
                // Open document
                string fileName = dlg.FileName;
                safeFileName = dlg.SafeFileName;
                App.ZipFileSafeName = safeFileName;

                FileNameTextBox.Text = fileName;
                App.ZipFileName = fileName;
            }

            //dlg.InitialDirectory = @"D:\Projects\ApiRouting\ApiRouting\bin\Debug";
            //dlg.FileName = @"D:\Projects\ApiRouting\ApiRouting\bin\Debug\Pacificwind.grb";
            //dlg.Reset();
        }

当用户从文件系统的任何位置选择文件时,我将该文件复制到 D:\Projects\ApiRouting\ApiRouting\Files,然后运行 ​​.exe。所以 GenerateCsvFile 方法总是有 fileName 参数值 D:\Projects\ApiRouting\ApiRouting\Files\xyz.grb。那么为什么当我从 D:\Documents 选择 grib 文件时我的应用程序在 D:\Documents 生成 .csv 文件,以及为什么当我选择来自 D:\Projects\ApiRouting\ApiRouting\Files 的 .csv 文件?

【问题讨论】:

  • 您的转义似乎“奇怪”...另一点:您显示的代码与您描述的问题(OpenFileDialog)没有任何关系...参数@的值是什么987654322@上述代码执行时(通过Debugger检查)?
  • @Yahia,我认为他在理解 degrib.exe 的工作原理以及它在何处产生结果方面存在问题,而不是 OpenFileDialog 问题
  • 文件名的值总是 D:\Projects\ApiRouting\ApiRouting\Files\xyz.grb
  • 如果你这样做了startInfo1.Arguments = @"" + fileName + "" + " -C -msg all -nMet -Csv &gt; outputfile.csv" 会怎样?这应该将degrib.exe 的输出通过管道传输到您选择的文件中。
  • @NickW 什么是 outputfile.csv?如果是路径可以用一些临时路径重写这个命令?

标签: c# wpf openfiledialog process.start


【解决方案1】:

degrib.exe 似乎正在将其输出写入工作目录。您的选择是

  1. 确定degrib 是否有参数允许您指定输出 CSV 文件的结束位置。
  2. startInfoWorkingDirectory 设置为您希望它们写入的目录。你可以这样做:startInfo.WorkingDirectory = new FileInfo(fileName).DirectoryName; 这应该确保文件被写入与 GRB 文件相同的目录。

【讨论】:

  • 感谢您过去 2 天的持续支持。终于你解决了我的问题。现在一切正常。谢谢哥们
猜你喜欢
  • 2021-11-16
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多