Как указать выходной каталог для.exe в C#

Я занимаюсь разработкой приложения wpf на C#. У меня есть одна кнопка, на которой я просматриваю файловую систему через Microsoft.Win32.OpenFileDialog. Есть одна кнопка отправки, на которой я вызываю Process.Start(), чтобы запустить.exe для файла grib. 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 и нажимаю кнопку отправки, файлы.csv генерируются в D:\Documents. Мой код для запуска.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. Итак, почему мое приложение генерирует файл.csv в D:\Documents, когда я выбираю файл grib из D:\Documents, и почему оно генерирует файл.csv в D:\Projects\ApiRouting\ApiRouting\Files, когда я выбираю CSV-файл из D:\Projects\ApiRouting\ApiRouting\Files?

1 ответ

Решение

degrib.exe кажется, записывает свой вывод в любой рабочий каталог. Ваши варианты

  1. Выясните, есть ли аргумент degrib это позволяет вам указать, где должны находиться выходные CSV-файлы.
  2. Установить WorkingDirectory из startInfo в каталог, в который вы хотели бы их записать. Вы можете сделать это с: startInfo.WorkingDirectory = new FileInfo(fileName).DirectoryName; Это должно гарантировать, что файлы записываются в тот же каталог, что и файл GRB.
Другие вопросы по тегам