C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
起動時にドロップされたファイルを受け取る
2020/7/19
string path1 =
Environment.GetCommandLineArgs()[1]; string path2 = Environment.GetCommandLineArgs()[2]; string path3 = Environment.GetCommandLineArgs()[3]; //取得したパスを C:\temp\droptest.txt に書き込みます。確認用に利用してください。 System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path1 }); System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path2 }); System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path3 }); |
スペースを含むパスも受け取れます。
メモ:最初のファイルは (0) ではなく、(1) です。 (0) は実行ファイルのフルパスを表します。
同じことをループで処理する例
こちらはいくつでも処理できます。
foreach (string
droppedPath in
Environment.GetCommandLineArgs().Skip(1)) { //取得したパスを C:\temp\droptest.txt に書き込みます。確認用に利用してください。 System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { droppedPath }); } |
この例はファイルの先頭に using System.Linq; があることが前提です。
メモ:ドロップされたファイルのフルパスはコマンドラインとして扱われます。コマンドラインの最大長は8191文字程度です。大量のファイルやフォルダーをドロップするとこの上限に達する場合があります。
参考:Visual Studioでデバッグ実行する方法
Visual Studioで本当にドロップしてデバッグ実行を開始することはできません。
ドロップしたことにしてデバッグ実行することはできます。
それには、プロジェクトのプロパティでデバッグページのアプリケーション引数にドロップされたファイルのフルパスを入力します。" " で囲むと良いです。複数ある場合はスペースをはさんでそれぞれを" " で囲みます。
この画面のUIや表示されている項目名はVisual Studioのバージョンによって異なります。
別の方法としては、Visual Studioの外でexeファイルにファイルをドロップして起動した後で、Visual Studioからそのアプリケーションにアタッチしてデバッグすることができます。
起動後のアプリケーションにアタッチするには、Visual Studioの[デバッグ]メニューから、[プロセスにアタッチ]で、プロセスの一覧から目的のアプリケーションを選択して「アタッチ」ボタンをクリックします。
あらかじめVisual Studioでソースコードが開かれた状態で、かつ、exeのフォルダーにpdbファイルがあるとスムーズです。
参考:冒頭の動画のアプリケーションのプログラム
WindowsフォームアプリケーションでVisual Basicで作りました。
Public Class
Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Location = New Point(100, 100) End Sub Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown Label2.Text = Environment.GetCommandLineArgs(1) End Sub End Class |
参考
コマンド プロンプト (cmd.exe) のコマンドライン文字列の制限
コマンド プロンプト (Cmd.exe) へ 8192 文字以上の引数を渡した場合に発生する現象
https://support.microsoft.com/ja-jp/help/2823587