Anzeige

 Parameterübergabe an C#-Programm durch Dateiaufruf

DK1FiWa

Grünschnabel
#1
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:
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (args.Length > 0)
            {
                Application.Run(new Form1(args[0]));
            }
            else
                Application.Exit();
        }
Vielen Dank
 
#2
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,..
 

DK1FiWa

Grünschnabel
#3
Ä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ß
 

DK1FiWa

Grünschnabel
#5
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:
        static void Main(string[] args)
        {            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (args.Length > 0)
            {
                Application.Run(new Form1(args[0]));
            }
            else
                Application.Exit();
        }


        public Form1(string arg)
        {
            InitializeComponent();

            if (arg.EndsWith(".csr"))
            {
                string fName = arg;
                string sContent = "";

                if (File.Exists(fName))
                {
                    StreamReader myFile = new StreamReader(fName, System.Text.Encoding.Default);
                    sContent = myFile.ReadToEnd();
                    myFile.Close();
                }
                .............
            }
            else
            {
                MessageBox.Show("Es wurden falsche Argumente übergeben: " + arg);
                Application.Exit();
            }
        }
 
#7
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
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
Hallo

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

C#:
static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            string file = null;

            if (args.Length > 0)
            {
                file = args[0];
            }
            Application.Run(new Form1(file));
        }
    }

public partial class Form1 : Form
    {
        List<GameState> games = new List<GameState>();
        Random rnd = new Random();

        public Form1(string path)
        {
            InitializeComponent();

            SetupGames();

            if (path != null && path.EndsWith(".manace"))
            {
                List<GameState> games2 = new List<GameState>();
                games2.AddRange(games);

                int index = 0;
                string line;

                using (System.IO.StreamReader file = new System.IO.StreamReader(openFileDialog1.FileName))
                {
                    try
                    {
                        while (true)
                        {
                            line = file.ReadLine();
                            if (line != string.Empty && line != null)
                            {
                                games2[index].tl = int.Parse(line);
                                games2[index].tm = int.Parse(file.ReadLine());
                                games2[index].tr = int.Parse(file.ReadLine());
                                games2[index].ml = int.Parse(file.ReadLine());
                                games2[index].mm = int.Parse(file.ReadLine());
                                games2[index].mr = int.Parse(file.ReadLine());
                                games2[index].bl = int.Parse(file.ReadLine());
                                games2[index].bm = int.Parse(file.ReadLine());
                                games2[index].br = int.Parse(file.ReadLine());
                            }
                            else
                            {
                                break;
                            }
                        }

                        games.Clear();
                        games.AddRange(games2);

                        MessageBox.Show("Loaded successfully!", "Loaded!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch
                    {
                        MessageBox.Show("The selected file is corrupt and can't be loaded!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
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:
#10
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
 
Anzeige

Neue Beiträge

Anzeige