2016-05-10 8 views
0

このプログラムは、pdfファイルを右クリックした後のコンテキストメニューから実行され、選択したファイルに "\ CALL OFF"を追加するだけで、ローカルでもプログラムは正常に動作します。パスに空白が含まれている自分のNAS上のファイルを実行すると、GetCommandLineArgsの出力は最初のスペースで停止します。C#ネットワークファイルのフルパスを取得するには?

public partial class Form1 : Form 
{ 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string[] args = System.Environment.GetCommandLineArgs(); 
      textBox1.Text = args[1]; 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      ProcessStartInfo start = new ProcessStartInfo(); 
      start.Arguments = "-add-text \"/ CALL OFF\" -font \"Helvetica-Bold\" -font-size 14 -pos-left \"194 776\" " + textBox1.Text + " -o out.pdf"; 
      start.FileName = "cpdf"; 
      Process.Start(start); 
     } 
} 
+0

string newPath = Path.GetFullPath(fileName); – gayan1991

答えて

1

String Joinバック一緒にすべてのコマンドライン引数は、1つの文字列に、セパレータとしてスペースを使用し、として引数をそれを使用します。また、それは1として受信されていることを確認するためにstart.Argumentsで使用した場合textBox1.Textの周りに二重引用符を追加する必要があります。

public partial class Form1 : Form 
    { 
      public Form1() 
      { 
       InitializeComponent(); 
      } 

      private void Form1_Load(object sender, EventArgs e) 
      { 
       string[] args = System.Environment.GetCommandLineArgs().Skip(1).ToArray(); 
       textBox1.Text = String.Join(" ", args); 
      } 

      private void button2_Click(object sender, EventArgs e) 
      { 
       ProcessStartInfo start = new ProcessStartInfo(); 
       start.Arguments = "-add-text \"/ CALL OFF\" -font \"Helvetica-Bold\" -font-size 14 -pos-left \"194 776\" " 
            + "\"" + textBox1.Text + "\"" + " -o out.pdf"; 
       start.FileName = "cpdf"; 
       Process.Start(start); 
      } 
    } 
+0

ありがとうございました!これはそれを整理しました!単にString.Join( ""、args)をString.Join( ""、args [1]、args [2]、args [3])に変更しました。 –

+0

インデックスを手動で指定したのはなぜですか。すべての議論をとるよりも? args [1]、args [2]、args [3] '-codeに注意してください。引数が4つ未満であれば例外がスローされます。 – MicroVirus

+0

私がプログラム自体と選択したファイルの完全なパスを得た場合は、選択したファイルへのパスが必要です。パスは変わることはありませんが、これはあまり優雅なソリューションではないことがわかります! –

0

あなたは\"を追加し、引用符でパス名を囲む必要があります。

string quoted = "\"" + textBox1.Text + "\""; 

を取得するには:

start.Arguments = "-add-text \"/ CALL OFF\" -font \"Helvetica-Bold\" -font-size 14 -pos-left \"194 776\" \"" + textBox1.Text + "\" -o out.pdf"; 

あなたがプログラムにコマンドライン引数として渡しているなら、あなたはそこにも、それを引用する必要があります:

myExe -file "Long path with spaces\file.pdf" 
関連する問題