Só para informar, o argumento por linha de comando não serve apenas para receber arquivos, mas também para receber qualquer informação que você quiser passar para o programa, ele era principalmente usado nos programas do MS-DOS que recebiam aquelas informações junto com a chamada do programa.
 No C# e na maioria das linguagens isso é bem simples e de forma parecida, isso porque o diretório do arquivo vai ser recebido através dos argumentos da função main. Geralmente ao criar um projeto em C# um dos arquivos presente no Solution Explorer é o Program.cs, nele tem a função main do seu programa, a primeira a ser executada, ele vem dessa forma:
 ...  
   static class Program  
   {  
     /// <summary>  
     /// The main entry point for the application.  
     /// </summary>  
     [STAThread]  
     static void Main()  
     {  
       Application.EnableVisualStyles();  
       Application.SetCompatibleTextRenderingDefault(false);  
       Application.Run(new Form1());  
     }  
   }  
 ....  
Nesse caso a função main não recebera nada pois ele não tem o parâmetro necessário para receber os argumentos de linha de comando, esse parâmetro é o args que é uma array de strings que precisa ser colocado, então na linha "static void Main()" substitua por "static void Main(string[] args)" de uma maneira que seu código fique assim:
 ...  
   static class Program  
   {  
     /// <summary>  
     /// The main entry point for the application.  
     /// </summary>  
     [STAThread]  
     static void Main(string[] args)  
     {  
       Application.EnableVisualStyles();  
       Application.SetCompatibleTextRenderingDefault(false);  
       Application.Run(new Form1());  
     }  
   }  
 ....  
 ...  
   static class Program  
   {  
     /// <summary>  
     /// The main entry point for the application.  
     /// </summary>  
     [STAThread]  
     static void Main(string[] args)  
     {  
       Application.EnableVisualStyles();  
       Application.SetCompatibleTextRenderingDefault(false);  
       // Cria o objeto da classe Form1  
       Form1 f1 = new Form1();  
       f1.LoadFile(args[0]);  
       // Inicia o f1  
       Application.Run(f1);  
     }  
   }  
 ....  
 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Windows.Forms;  
 using System.IO;  
 namespace txtedit  
 {  
   static class Program  
   {  
     /// <summary>  
     /// The main entry point for the application.  
     /// </summary>  
     [STAThread]  
     static void Main(string[] args)  
     {  
       Application.EnableVisualStyles();  
       Application.SetCompatibleTextRenderingDefault(false);  
       // Cria o objecto da class Form1  
       Form1 f1 = new Form1();  
       // Verifica se há algum arquivo sendo aberto com o programa  
       if (args.Length > 0)  
       {  
         // Verifica se o arquivo existe  
         if (File.Exists(args[0]))  
         {  
           f1.LoadFile(args[0]);  
         }  
       }  
       // Inicia o f1  
       Application.Run(f1);  
     }  
   }  
 }  
 ...  
   static class Program  
   {  
     /// <summary>  
     /// The main entry point for the application.  
     /// </summary>  
     [STAThread]  
     static void Main(string[] args)  
     {  
       Application.EnableVisualStyles();  
       Application.SetCompatibleTextRenderingDefault(false);  
       // Cria o objecto da class Form1  
       Form1 f1 = new Form1();  
       // Verifica se há algum arquivo sendo aberto com o programa  
       if (args.Length > 0)  
       {  
         // Verifica se o arquivo existe  
         if (File.Exists(args[0]))  
         {  
           // Verifica se a extensão do arquivo é .rtf  
           if (Path.GetExtension(args[0]) == ".rtf")  
           {  
             // Carrega o arquivo diretamente para o richTextBox1  
             f1.richTextBox1.LoadFile(args[0]);  
           }  
         }  
       }  
       // Inicia o f1  
       Application.Run(f1);  
     }  
   }  
 ....  
Se você estiver no modo console application isso é mais fácil ainda, isso também porque ele já vem com o parâmetro args na função main, veja este exemplo de como listar multiplos arquivos que estão sendo abertos por linha de comando usando o foreach:
 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Text;  
 namespace argstest  
 {  
   class Program  
   {  
     static void Main(string[] args)  
     {  
       // Verifica se tem argumentos na linha  
       if (args.Length > 0)  
       {  
         // Lista os arquivos na linha de comando  
         foreach (string arg in args)  
         {  
           // Mostra o nome do arquivo  
           Console.WriteLine("- " + arg);  
         }  
       }  
       else  
       {  
         // Caso não tenha  
         Console.WriteLine("Nenhum arquivo na linha de comando!");  
       }  
       // Espera o usuario pressionar enter  
       Console.ReadLine();  
     }  
   }  
 }  
Se tiver varios:
Este exemplo mostra somente o nome do arquivo (também precisa do Sistem.IO):
 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Text;  
 using System.IO;  
 namespace argstest  
 {  
   class Program  
   {  
     static void Main(string[] args)  
     {  
       // Verifica se tem argumentos na linha  
       if (args.Length > 0)  
       {  
         // Lista os arquivos na linha de comando  
         foreach (string arg in args)  
         {  
           // Mostra o nome do arquivo  
           string fn = Path.GetFileName(arg);  
           Console.WriteLine("- " + fn);  
         }  
       }  
       else  
       {  
         // Caso não tenha  
         Console.WriteLine("Nenhum arquivo na linha de comando!");  
       }  
       // Espera o usuario pressionar enter  
       Console.ReadLine();  
     }  
   }  
 }  
 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Text;  
 using System.IO;  
 namespace argstest  
 {  
   class Program  
   {  
     static void Main(string[] args)  
     {  
       // Verifica se tem argumentos na linha  
       if (args.Length > 0)  
       {  
         // Lista os arquivos na linha de comando (usando for)  
         for (int index = 0; index < args.Length; index++)  
         {  
           // Mostra o nome do arquivo  
           string fn = Path.GetFileName(args[index]);  
           Console.WriteLine("- " + fn);  
         }  
       }  
       else  
       {  
         // Caso não tenha  
         Console.WriteLine("Nenhum arquivo na linha de comando!");  
       }  
       // Espera o usuario pressionar enter  
       Console.ReadLine();  
     }  
   }  
 }  
Espero ter ajudado





 
Nenhum comentário:
Postar um comentário