1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Parameterübergabe an C#-Programm durch Dateiaufruf

Dieses Thema im Forum ".NET Application und Service Design" wurde erstellt von DK1FiWa, 28. Mai 2009.

  1. DK1FiWa

    DK1FiWa Grünschnabel

    Hey Leute,

    ich will mein geschriebenes Programm mit einer Datei öffnen, die ein paar Startparameter bereit hält. Über die Console geht es problemlos: bla.exe 1,3

    jetzt hab ich meine *.crs-datei mit der applikation verknünpft und 1,3 in die Datei geschrieben....funktioniert allerdings nicht (hätte mich auch gewundert, wenn es so einfach gewesen wäre).
    Die kann ich dem Programm sagen, dass es den Inhalt der Datei als parameter annehmen soll oder wie bzw. muss der Inhalt der Datei aussehen?

    Hier mal die Main-Method
    Code (Text):
    1.         static void Main(string[] args)
    2.         {
    3.             Application.EnableVisualStyles();
    4.             Application.SetCompatibleTextRenderingDefault(false);
    5.             if (args.Length > 0)
    6.             {
    7.                 Application.Run(new Form1(args[0]));
    8.             }
    9.             else
    10.                 Application.Exit();
    11.         }
    Vielen Dank
     
  2. Alexander Schuc

    Alexander Schuc crazy-weasel Moderator

    Wenn du einen Dateinamen als Parameter übergibst, und den Inhalt der Datei willst, wirst diese Datei öffnen und auslesen müssen.

    Entsprechende Klassen und Methoden findest du im System.IO Namespace.

    lg,..
     
  3. DK1FiWa

    DK1FiWa Grünschnabel

    Ähm ja, wenn ich gewollt hätte, diese Datei auszulesen, dann wäre das ja leicht gewesen.
    Ich versuche mich nochmal klarer auszudrücken: diese Datei, ist die zu startende Datei, die die Parameter enthält. Ich verknüpfe die Datei mit dem Programm, sodass das Programm beim Doppelklick auf die Datei sich öffnet ("Datei öffnen mit" aus dem Windows-Kontext würde dem entsprechen).
    In dieser Datei will ich ein paar Parameter reinschreiben und beim Doppelklick auf die Datei, soll sich die Anwendung mit genau den Parametern starten, die in der Datei stehen.
    Ich hoffe, dass ich das jetzt besser ausgedrückt habe ;)

    Gruß
     
  4. M4st3r

    M4st3r Erfahrenes Mitglied

  5. DK1FiWa

    DK1FiWa Grünschnabel

    habs jetzt rausgefunden. Ich hatte ja versucht, dass der inhalt meiner datei die args[] sind. Dabei ist ja die das programm öffnende datei das args[0] (also der dateiname).
    also hab ich mit args[0] die datei geöffnet und den inhalt interpretiert...fertig wars :p

    Code (Text):
    1.         static void Main(string[] args)
    2.         {            
    3.             Application.EnableVisualStyles();
    4.             Application.SetCompatibleTextRenderingDefault(false);
    5.             if (args.Length > 0)
    6.             {
    7.                 Application.Run(new Form1(args[0]));
    8.             }
    9.             else
    10.                 Application.Exit();
    11.         }
    12.  
    13.  
    14.         public Form1(string arg)
    15.         {
    16.             InitializeComponent();
    17.  
    18.             if (arg.EndsWith(".csr"))
    19.             {
    20.                 string fName = arg;
    21.                 string sContent = "";
    22.  
    23.                 if (File.Exists(fName))
    24.                 {
    25.                     StreamReader myFile = new StreamReader(fName, System.Text.Encoding.Default);
    26.                     sContent = myFile.ReadToEnd();
    27.                     myFile.Close();
    28.                 }
    29.                 .............
    30.             }
    31.             else
    32.             {
    33.                 MessageBox.Show("Es wurden falsche Argumente übergeben: " + arg);
    34.                 Application.Exit();
    35.             }
    36.         }
     
  6. Alexander Schuc

    Alexander Schuc crazy-weasel Moderator

    Hab ich doch gesagt? Nungut... viel Spass noch damit..
     
  7. DerBennster

    DerBennster Grünschnabel

    Das hat funktioniert? Ich stehe jetzt nämich an der selben Stelle und will das selbe machen nur das sich das Programm garnicht erst öffnet wenn ich es über die Datei öffne. Das Fenster taucht nicht auf und auch über den Task Manager läuft das Programm nicht. Ich habe es prinzipiell wie du gelöst nur das sich das Programm auch ohne Datei öffnen kann. Dann wird eben mit einem leeren Pfad die Form geladen und mach von dort aus weiter aber es tut halt nicht.
     
  8. sheel

    sheel I love Asm Administrator

    Hi

    kannst du deinen derzeitigen Code zeigen?
    Ohne wirds schwer, Probleme zu finden...

    Jedenfalls ist das Thema hier 9 Jahre alt; kann gut sein dass mit neueren Versionen nicht mehr alles gleich funktioniert.
     
  9. DerBennster

    DerBennster Grünschnabel

    Hallo

    natürlich kann ich meine Code zeigen. Vielleicht weist du ja was ich da machen kann.

    Code (C#):
    1. static class Program
    2.     {
    3.         /// <summary>
    4.         /// Der Haupteinstiegspunkt für die Anwendung.
    5.         /// </summary>
    6.         [STAThread]
    7.         static void Main(string[] args)
    8.         {
    9.             Application.EnableVisualStyles();
    10.             Application.SetCompatibleTextRenderingDefault(false);
    11.             string file = null;
    12.  
    13.             if (args.Length > 0)
    14.             {
    15.                 file = args[0];
    16.             }
    17.             Application.Run(new Form1(file));
    18.         }
    19.     }
    20.  
    21. public partial class Form1 : Form
    22.     {
    23.         List<GameState> games = new List<GameState>();
    24.         Random rnd = new Random();
    25.  
    26.         public Form1(string path)
    27.         {
    28.             InitializeComponent();
    29.  
    30.             SetupGames();
    31.  
    32.             if (path != null && path.EndsWith(".manace"))
    33.             {
    34.                 List<GameState> games2 = new List<GameState>();
    35.                 games2.AddRange(games);
    36.  
    37.                 int index = 0;
    38.                 string line;
    39.  
    40.                 using (System.IO.StreamReader file = new System.IO.StreamReader(openFileDialog1.FileName))
    41.                 {
    42.                     try
    43.                     {
    44.                         while (true)
    45.                         {
    46.                             line = file.ReadLine();
    47.                             if (line != string.Empty && line != null)
    48.                             {
    49.                                 games2[index].tl = int.Parse(line);
    50.                                 games2[index].tm = int.Parse(file.ReadLine());
    51.                                 games2[index].tr = int.Parse(file.ReadLine());
    52.                                 games2[index].ml = int.Parse(file.ReadLine());
    53.                                 games2[index].mm = int.Parse(file.ReadLine());
    54.                                 games2[index].mr = int.Parse(file.ReadLine());
    55.                                 games2[index].bl = int.Parse(file.ReadLine());
    56.                                 games2[index].bm = int.Parse(file.ReadLine());
    57.                                 games2[index].br = int.Parse(file.ReadLine());
    58.                             }
    59.                             else
    60.                             {
    61.                                 break;
    62.                             }
    63.                         }
    64.  
    65.                         games.Clear();
    66.                         games.AddRange(games2);
    67.  
    68.                         MessageBox.Show("Loaded successfully!", "Loaded!", MessageBoxButtons.OK, MessageBoxIcon.Information);
    69.                     }
    70.                     catch
    71.                     {
    72.                         MessageBox.Show("The selected file is corrupt and can't be loaded!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    73.                     }
    74.                 }
    75.             }
    76.         }
    Ich habe für Dateien die mein Programm lesen sollen die extra Endung ".manace" genommen und möchte gerne dass diese Datein standartmäßig mit meinem Programm geöffnet werden.
    Ich habe auch schon viel im Internet gesucht aber nichts dazu gefunden.
    Auch noch wichtig zu sagen ist dass ich den Parameter string[] args in der Main-Methode eingefügt habe daher kann es sein das der Parameter nie gefüllt wird aber trotzdem komisch das sich das Programm nicht mal öffnet sonder nur Laden anzeigt (die Maus ändert sich) aber letztendlich passiert nicht mehr.
     
    Zuletzt bearbeitet: 14. Januar 2018 um 19:51 Uhr
  10. DerBennster

    DerBennster Grünschnabel

    Das Thema hat sich erledigt. Ich habe den Fehler selber gefunden. Der Fehler lag bei meiner fehlerhaften Lade und Speicherroutine. Und die war fehlerhaft da ich unbrauchbare Variablen in meiner Klasse GameState durch int.MinValue gekennzeichnet habe und dadurch das Laden fehlerhaft war wenn es diese Werte von einem Text in int converten wollte. Da ich das aber jetzt gändert habe funktioniert es einwandfrei. Trotzdem danke für die schnelle Antwort :D
     
    sheel gefällt das.
Die Seite wird geladen...