2013-01-22 16 views
8

Dễ dàng để tái tạo nhưng thực sự xa lạ với tôi:Nhiều args trong Console Application không phân tích một cách chính xác

Thêm 'args' sau với 3 dây vào lệnh đối số dòng Textbox trong VisualStudio (Theo Dự án Properties-> Debug-> Bắt đầu Options):

-SourceFile:"c:\temp\file.txt" -DestinationFolder:"c:\temp\" -ArchiveFolder:"C:\temp\" 

thử nghiệm nó với ứng dụng điều khiển đơn giản này:

class Program 
{ 
    static void Main(string[] args) 
    { 
     foreach (string t in args) 
     { 
      Console.WriteLine(t); 
     } 
     Console.ReadKey(); 
    } 
} 

Kết quả: mảng (args []) có 2 thay vì 3 dây?

[0] SourceFile:c:\temp\file.txt 
[1] DestinationFolder:c:\temp" -ArchiveFolder:C:\temp" 

Ai đó có thể giải thích tại sao điều này xảy ra? Có điều gì đó kỳ lạ với dấu ngoặc kép gây ra bình thường, dấu ngoặc kép sẽ bị xóa bởi .net, nhưng ở đây, vẫn còn một số trích dẫn ... nhưng tôi không thể thấy được vấn đề ...

Cảm ơn sự giúp đỡ!

Trả lời

12

Bạn có một \" trong giá trị DestinationFolder, trong đó "thoát" báo giá, bao gồm cả trong văn bản của giá trị thay vì ghép nối với dấu ngoặc kép mở để đóng chuỗi. Bạn muốn có một chữ, \, vì vậy sử dụng \\:

-SourceFile:"c:\temp\file.txt" -DestinationFolder:"c:\temp\\" -ArchiveFolder:"C:\temp\\" 

(thậm chí bạn có thể thấy thoát trong hành động trong công cụ SO ấy làm nổi bật)

+0

THX! bây giờ nó rõ ràng :) – dataCore