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