-2

私はC#でwpfアプリケーションを開発しています。Microsoft.Win32.OpenFileDialogを介してファイルシステムを参照しているボタンが1つあります。Gribファイルで.exeを実行するためにProcess.Start()を呼び出している送信ボタンが1つあります。exeは、.csvファイルを正常に生成します。最初にファイルシステムを参照し、ファイルを選択してから、送信ボタンをクリックします。私のアプリケーション実行パスはD:\ Projects \ ApiRouting \ ApiRouting \ bin\Debugです。私のアプリケーションのD:\ Projects \ ApiRouting \ ApiRouting\Filesに1つのフォルダーがあります。パスD:\ Projects \ ApiRouting \ ApiRouting \ Filesからファイルを選択し、送信ボタンをクリックすると、.csvファイルがD:\ Projects \ ApiRouting \ ApiRouting\Filesに生成されます。これは正しいです。D:\ Documentsからファイルを選択し、送信ボタンをクリックすると、.csvファイルがD:\Documentsに生成されます。実行する私のコード。

 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ファイルを生成する理由D:\ Projects \ ApiRouting \ ApiRouting \ Filesからの.csvファイル?

4

1 に答える 1

2

degrib.exe作業ディレクトリが何であれ、その出力を書き込んでいるようです。あなたのオプションは

  1. degrib出力CSVファイルをどこに配置するかを指定できる引数があるかどうかを判断します。
  2. を書き込みたいディレクトリにWorkingDirectory設定します。startInfoこれは次の方法で実行できます。startInfo.WorkingDirectory = new FileInfo(fileName).DirectoryName;これにより、ファイルがGRBファイルと同じディレクトリに書き込まれるようになります。
于 2012-10-12T12:13:42.527 に答える