質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

2677閲覧

WPFでの開発における外部アプリ(VLC Player)起動について

Saito_FLLAA

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/01/18 22:26

前提・実現したいこと

ListBox内で現在選択されている項目(動画ファイルのパス)を取得して、コマンドライン引数に指定しVLCを起動するとゆうソフトを制作しているのですが
VLCの起動とListBox内の選択項目を取得するところまではいけるのですが、
コマンドライン引数に上記の動画ファイルのパスを指定して起動しようとするとエラー(入力を開くことができません)と出て開くことができません。
私自身Javaをメインに勉強していて今回初めてC#に触れたので躓いています。よろしければお力添えいただければ幸いです。

該当のソースコード

C#

1ProcessStartInfo pInfo = new ProcessStartInfo(); 2 pInfo.UseShellExecute = true; 3 pInfo.FileName = "VLCのパス"; 4 pInfo.Arguments = "動画ファイルのパス" //VLC 動画ファイル 共にパスは間違っていないです。 5 6 Process.Start(pInfo);

環境

Windows10 x64
VisualStudio2019 C#

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コードはそれで間違っていないので、伏せられている「VLCのパス」と「動画ファイルのパス」の書き方に問題がありそうです。

C#の文字列リテラルでは(Javaでもそうですが)、\はエスケープに使われるため、区切り文字としてのバックスラッシュは\と書く必要があります。
あるいは、@に続けて文字列リテラルを書くと、\をそのままバックスラッシュとして使えます(逐語的文字列リテラル)。

これらを踏まえると、たとえば「VLCのパス」がC:\Program Files\VideoLAN\VLC\vlc.exeだとすると、

  • pinfo.FileName = "C:\Program Files\VideoLAN\VLC\vlc.exe";
  • pinfo.FileName = @"C:\Program Files\VideoLAN\VLC\vlc.exe";

のいずれかの形式で書く必要があります。「動画パスのファイル」も同様です。

補足: 動画ファイルのパスに空白が含まれるのであれば、通常の文字列リテラルでは\"、逐語的文字列リテラルでは""を使って、パス全体をダブルクォートで囲む(文字列そのものにダブルクォートを含める)ように書けばいいでしょう。

  • pInfo.Arguments = "\"動画ファイルのパス\"";
  • pInfo.Arguments = @"""動画ファイルのパス""";

投稿2021/01/18 23:04

編集2021/01/19 11:21
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Saito_FLLAA

2021/01/19 10:17

回答ありがとうございます。 コードが間違っていないことが分かり助かりました。 動画ファイルのパスで半角スペースがあるため、パスが二つ(ものによると三つ)に分割されて起動しようとしていることが確認されました。 Javaでは半角スペースがあっても起動することができていたのですが、C#では半角スペースはNGなのでしょうか?
Saito_FLLAA

2021/01/19 14:34

ありがとうございます。 パス全体をダブルクォートで囲むことで起動することが確認できました。大変勉強になりました。 最後に一つお伺いしたいのですが、 string aaa = path + "\" + ListBox.SelectedItem.ToString(); pInfo.Arguments = aaa; のように動画ファイルパスをstring変数で行うときはどうすればいいのでしょうか? //半角スペースが含まれない時は起動します
Daregada

2021/01/19 14:49

最終的に作り上げたパスの両側にダブルクォートを付けてください。+で結合してもいいけど、$"~"の内部に{変数名}などを書ける「文字列補完」機能を使うと楽に書けます。 pInfo.Arguments = $"\"{aaa}\""; pInfo.Arguments = $@"""{aaa}"""; といった感じ。
Saito_FLLAA

2021/01/20 14:44

返信が遅れて申し訳ないです。 無事に起動することができました。 大変勉強になりましたありがとうございました。
guest

0

おそらく動画ファイルのパスの指定が間違っているんでしょう。
どういうパスを指定してるでしょうか

#相対パスというのは、カレントディレクトリを起点としたパスとなります

投稿2021/01/18 22:53

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Saito_FLLAA

2021/01/19 10:10

回答ありがとうございます。 y_waiwai様のご指摘通り、動画ファイルのパスを調べたところフォルダ名(ファイル名)に空白があるとエラーが出ていることが分かりました。 空白を無くしてみると起動することが確認できました。 追加のご質問なのですが、フォルダ(ファイル名)に空白を含む場合はだめなのでしょうか?
Saito_FLLAA

2021/01/19 10:16

訂正します。 空白 = 半角スペース
y_waiwai

2021/01/19 10:21

その場合は、そのパス全体を”で囲うといける場合があります なんたら="\"スペース含むパス\""; #実際の記述がわからないのでなんともですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問