1

次のコードを使用して、アプリケーションによって開かれた右クリック ファイルを実装しました。私の目的は、そのファイルのパスをプログラムに入れることです。

私が使う:

public static string path = "";

static void Main(string[] args)
{
  if (args.Length > 0)
  {
     path = args[0];      
  }
}

次に、変数 を使用しますpath。これは、アプリケーションがコンテキスト メニューから開いたファイルです。

問題:

ファイル名にスペースが含まれていない場合、ファイル パスは問題なくインポートされます。ただし、ファイル名にスペースが含まれている場合、ファイル名の最初のスペースの後の文字を削除するだけでなく、拡張子を付けずに表示されるファイル名。

例:

  1. fileName.pdffileName.pdf
  2. fileName blah blah.pdffilename

2 番目の例は、スペースを含むファイルが正常にインポートされなかったことを示しています。

そのため、名前に問題なくスペースを含むファイルを解析する方法についてのアイデアがあれば。

4

2 に答える 2

3

これは、オペレーティング システムがコマンド ライン引数を分割しようとするためですが、適切な場所に引用符を付けないと、間違った結果になる可能性があります。デフォルトでは、次のコマンド ライン

MyConsoleApp.exe FileName blah blah.pdf

args3 つの文字列FileName, blahand blah.pdf(スペースで分割) が含まれることになります。

この問題の最も一般的な解決策は、アプリケーションを呼び出すときに引数を引用符で囲むことです。たとえば、

MyConsoleApp.exe "FileName blah blah.pdf"

これによりargs、値を持つ最初の文字列で長さが 1 になりますFileName blah blah.pdf(OS は余分な引用符を取り除きます)。

もう 1 つの方法は、Environment.CommandLine プロパティを使用して、アプリケーションの呼び出しに使用される完全な未解析のコマンド ラインを取得し、その文字列を手動で解析することです。argsこれにより、柔軟性が向上します ( Main に渡された引数を使用するときに、引数が引用符で囲まれているかどうかを常に識別できるとは限らないため)。

于 2012-10-15T12:24:28.593 に答える
0

誰かが完璧な答えを投稿しましたが、私が賛成票を投じて正しい答えにする前に、彼はそれを削除しました。

答えは、「%1」を「%0」に変更する必要があるというもので、うまくいきました。

于 2012-10-15T12:40:05.727 に答える