2017-02-04 4 views
0

でネットワーク上の場所からの不正なパスを返します。私は、コマンドライン引数からファイル名を取得したい - プログラムを行うには、コンテキストメニュー(右クリック)を使用して呼び出して起動されますこれはレジストリなどに追加されます。GetCommandLineArgs私は麺の難問</p> <p>を持っているスペース

ドライブが正常に動作しますが、スペースを含むネットワークアドレスに対して実行すると問題が発生します。

すなわち「\\サーバー\テストフォルダ\ファイル名.txt」

スペースがない場合は、正しいパスを返すように思えます。ディレクトリまたはファイル名にスペースが含まれている場合、そのコンポーネントは不安定になります。

例画像:

Path with spaces
\\192.168.0.200\Web\1K5SXZ~6\T5MSMN~1.TXT

Path without spaces
\\192.168.0.200\Web\testdirectory\testfile.txt

コードを使用:

string[] args = Environment.GetCommandLineArgs(); 

foreach (string a in args) 
{ 
    MessageBox.Show(a); 
} 

任意の考え?

myapp.exe \foo bar\baz

ことができます:実行可能ファイルがスペースを含む引数で呼び出された場合、それは2つの引数または一つだ天気をあなたは区別することができませんので

Thxを E

答えて

0

これが起こります(意図した)\foo bar\bazではなく、\foo\bar\baz(2つの引数、スペースがあるため)と解釈されます。

myapp.exe "\foo bar\baz"

私はエクスプローラが念(R)ルート*を取り、単にので、とにかくスペースを含まず、決して8.3 filenameを使用して推測し、削除:通常、あなたはこれを防ぐために、引用符でパスを囲みます引用符が必要です。

詳しくはhereを参照してください。あなたはLFN(長いファイル名を)したい場合は、それはそれを取り戻すのは簡単です:

string[] args = Environment.GetCommandLineArgs(); 

foreach (string a in args) 
{ 
    MessageBox.Show(new FileInfo(a).FullName); 
} 

*実際には、エクスプローラーは、「LFN対応」アプリケーションを起動しているかどうかを知る方法がないため、おそらくエクスプローラーがそうするでしょう。しかし、それはちょうど(思考通りではない)私の見解ではない。

+0

スポットオン - それを解決しました。本当にありがとうございます! –

-1

私はフォルダ/ファイル名のスペースを一切使用しないようにしようとしていますが、私が知っている限り、これは悪いはずです。

@ "\ server \ test folder \ filename.txt";

+0

(NB:私のdownvoteではない!)。それは2017年です。非常に具体的な古いレガシーアプリケーションがない限り、あなたは絶対に作業する必要があります。パスにスペースを使用しないことを推奨する理由はありません。それはばかげている。 – RobIII

関連する問題