C# Programmaufruf mit Kommandozeilenparameter

Status
Für weitere Antworten geschlossen.

Suprimos

Lieutenant
Registriert
Sep. 2009
Beiträge
516
Hallo,
hab hier mal wieder ein kleines Problem von der Uni bekommen :D
es geht darum:
Das Programm soll wie folgt aufgerufen werden, die Eingabe- bzw. Ausgabedatei werden als Kommandozeilenparamter
übergeben:
isort input.txt output.txt


soweit so gut, problem ist nur das ich so etwas bisher noch nicht gelernt habe.
Ich habe bereits ein Programm geschrieben das wenn ich es ausführe es die input.txt einliest, und eine output.txt schreibt.
aber wie übergebe ich sowas in der kommandozeile?
kann mir da vielleicht jemand einen tipp geben?

Mfg
 
ne kurze google suche hilft da wunder ;)
du hast des meiste ja schon, musst ja nur noch schauen wie du des output.txt aus der kommandozeile holst
 
Guck dir mal die System.Environment Klasse an. Da findest du alles, was du brauchst.
 
@e-laurin
also,
1. ist das keine komplette hausaufgabe, sondern lediglich ein teil...
ich frage hier ja nicht nach einer lösung , sonst hätte ich ja die komplette aufgabe gepostet. ich will ja lediglich wissen wie die kommandozeilen übergabe in c# funktioniert !

2. ich habe leider nicht das gefunden was ich wissen wollte bei google. wenn du sowas in unter 1min findest, ist das schön, du programmierst vielleicht auch 12h am tag, und weißt genau wonach du suchen musst. ich habe bisher ein semester c# gehabt, bin also im prinzip noch ein noob.
 
Zuletzt bearbeitet:
danke @ all
wenn ich das richtig verstanden habe, werden durch die argumente input.txt und output.txt ja lediglich die namen der einzulesenden und auszugebenden datei bestimmt
 
Na das offenbart dir ja die Aufgabenstellung im Prinzip schon. Das bisschen schwarze Magie, was du verstehen musst, ist dass alles was beim Aufruf per Kommandozeile übergeben wird, also:
isort meine Oma faehrt im Huehnerstall Motorrad
im Endeffekt in einem String-Array landet, welches du dann in der main-Methode beliebig verwerten kannst.
 
soweit hab ich das auch verstanden...
ich wollte es mal eben programmieren, komme aber auf fehler...
wenn ich das programm unter linux mit:
mono isort.exe input.txt und output.txt starte,

und dann das eben gelernte mit einbaue (ich zeige hier nur die wichtigsten ausschnitte):

public static void Main(string[] args)

using (StreamReader sr = new StreamReader("args[1]"))

kommt:
Exception: System.IO.FileNotFoundException: Could not find file "******/Desktop/args[1]".
 
In args[1] ist doch ein String drin. Wenn du allerdings "" drum herum machst, dann bekommst du nicht das was in dem Array steht, sondern eben "args[1]"
 
achso, ja lol stimmt...
danke für den hinweis

DANKE !!!
es hat alles geklappt :D
vielen dank für eure hilfe
 
Ich würds so machen:
Code:
using System.IO;

public static void Main(string[] args)
{
       // Prüfen ob die Eingabedatei überhaupt da ist:
       if (!File.Exists(args[1])
          return;
       
       FileStream fs = new FileStream(args[1],FileMode.Open, FileAccess.Read);
       StreamReader sr = new StreamReader(fs);

       string line = sr.ReadLine();
}
 
@MacGyver. Wir hatten das Thema File IO letztens in vielen Threads gehabt, und es wurde immer drauf hingewiesen das ganze mit einem using-Block und einem Try-Catch zu ummanteln. Denn sicher kannst du nicht sein das die Datei existiert nachdem deine File.Exist durchgelaufen ist. Kann also immernoch ein Fehler passieren.
Und deine Methode ist mehr als unsauber, die Streams werden nirgends geschlossen.
 
Es gibt schon eine fertige statische Methode in File oder Path oder Directory, die dir die ganze Datei einliest und in String oder List abspeichert. Wieso die Mühe machen alles Per hand und unsauber zu Programmieren?
 
toeffi schrieb:
@MacGyver. Wir hatten das Thema File IO letztens in vielen Threads gehabt, und es wurde immer drauf hingewiesen das ganze mit einem using-Block und einem Try-Catch zu ummanteln. Denn sicher kannst du nicht sein das die Datei existiert nachdem deine File.Exist durchgelaufen ist. Kann also immernoch ein Fehler passieren.
Und deine Methode ist mehr als unsauber, die Streams werden nirgends geschlossen.

Das ist mir auch klar dass das nicht sauber ist. Ich hab aber keine Zeit und keine Lust ne komplette Funktion zu schreiben. Sollte nur ein Beispiel sein.
 
MacGyver schrieb:
Das ist mir auch klar dass das nicht sauber ist. Ich hab aber keine Zeit und keine Lust ne komplette Funktion zu schreiben. Sollte nur ein Beispiel sein.

Entweder du postest eine repräsentable Lösung, oder du lässt es, wenn du keine Lust/Zeit hast, aber was, fast schon falsches, zu posten ist nicht hilfreich.
 
toeffi schrieb:
Entweder du postest eine repräsentable Lösung, oder du lässt es, wenn du keine Lust/Zeit hast, aber was, fast schon falsches, zu posten ist nicht hilfreich.

Entschuldigung das ist was helfen wollte.
Und wann das alles so falsch ist funktioniert es in meinen Programmen erstaunlich gut.
Using zu benutzen macht für mich keinen Sinn weil das Programm für die geschilderte Aufgabe nicht komplex genug ist. Und try-catch-Blöcke kann jeder selber setzen.
Ich finde wenn man ein Beispiel macht sollte man sich aufs Wesentliche beschränken und nicht noch hübsches Rahmenwerk drumrum basteln.
 
Zuletzt bearbeitet:
Using macht prinzipiell bei jedem Disposable einen Sinn, da es dann am Ende automatisch freigegeben wird, und man sich als Programmierer nicht darum kümmern muss.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben