private void btnFFmpegDir_Click(object sender, EventArgs e) { //FolderBrowserDialogクラスのインスタンスを作成 using (FolderBrowserDialog fbd = new FolderBrowserDialog()) { //上部に表示する説明テキストを指定する fbd.Description = "ffmpegのフォルダを指定して下さい。"; //ルートフォルダを指定する //デフォルトでDesktop fbd.RootFolder = Environment.SpecialFolder.MyComputer; //最初に選択するフォルダを指定する //RootFolder以下にあるフォルダである必要がある fbd.SelectedPath = txtFFmpegDir.Text; //ユーザーが新しいフォルダを作成できるようにする //デフォルトでTrue fbd.ShowNewFolderButton = false; //ダイアログを表示する if (fbd.ShowDialog(this) == DialogResult.OK) { //選択されたフォルダを表示する //Console.WriteLine(fbd.SelectedPath); try { string dir = fbd.SelectedPath; dir = FileTools.toFullPath(dir); { string sysRootDir = Environment.SystemDirectory[0] + ":\\"; if (StringTools.equalsIgnoreCase(dir, sysRootDir)) { throw new FailedOperation("システムドライブのルートフォルダは指定出来ません。"); } } if (FFmpeg.isFFmpegDir(dir) == false) { throw new FailedOperation("ffmpeg のパスではありません。"); } txtFFmpegDir.Text = dir; } catch (Exception ex) { FailedOperation.caught(ex); } } } }
private void perform() { if (FFmpeg.isFFmpegDir(Gnd.i.ffmpegDir) == false) { using (FFmpegDirDlg f = new FFmpegDirDlg()) { f.ShowDialog(); } if (Gnd.i.ffmpegDir == "") { throw new Cancelled("ffmpeg のパスが指定されていないため、続行出来ません。"); } if (FFmpeg.isFFmpegDir(Gnd.i.ffmpegDir) == false) { throw new Cancelled("ffmpeg のパスが見つからないため、続行出来ません。"); } } try { BusyDlg.perform(delegate { FFmpegBin.i = new FFmpegBin(FFmpeg.getBinDir()); try { FFmpegBinTester.doTest(); } catch (Exception e) { Gnd.i.ffmpegDir = ""; // 次回起動時に再設定出来るように.. throw new ExceptionCarrier(e); } if (Gnd.i.bootOpenFile != null) { Gnd.i.md = new MediaData(Gnd.i.bootOpenFile); } }); using (MainWin f = new MainWin()) { f.ShowDialog(); } } finally { BusyDlg.perform(delegate { if (Gnd.i.md != null) { Gnd.i.md.Dispose(); Gnd.i.md = null; } if (Gnd.i.qsd != null) { Gnd.i.qsd.Dispose(); Gnd.i.qsd = null; } if (FFmpegBin.i != null) { FFmpegBin.i.Dispose(); FFmpegBin.i = null; } }); } }