Benutzer mit den meisten Antworten
Automatisches Einlesen eines Dateipfades

Frage
-
Guten Morgen,ich bin noch unerfahren bei der Anwendung von C# und brauche daher eure Hilfe :)Folgendes: Ich habe einen Ordner, der z.B ".txt" und ".docx" Dokumente enthält. Der Anwender kann beispielsweise ein .txt-Dokument mit meinem erstellen Programm (also der EXE) öffnen. Anschließend werden dann bestimmte Dinge erfolgen, die hier nicht von Relevanz sind.Das Problem ist, dass in meinem aktuellen Code der Pfad statisch ist. Ich möchte aber je nach angeklicktem Dokument (bzw. auf welche die EXE angewendet wurde) dessen Pfad einlesen, also eher in Richtung dynamisch.Ist es überhaupt der richtige Weg, das Dokument mit der EXE auszuführen oder gibt es eine bessere Lösung?Habe schon verschiedene Klassen angeschaut, ohne Erfolg. Immer musste man den Pfad angeben, allerdings kommt das ja auf den Verwender an, welche .txt-Datei er ausgewählt hat, also ob die im z.b. im C- o. D-Laufwerk liegt.Danke.
static void Main(string[] args) { string sourceFile = @"C:\Users\Documents\test1.txt"; string sourcePath = Path.GetDirectoryName(sourceFile); //Determine if file is of type ".txt" if (".txt" != Path.GetExtension(sourceFile)) { Console.WriteLine("This EXE does not work with the choosen file"); Console.WriteLine("Programm will terminate in the next step"); Console.ReadLine(); return; } //Create a folder in the current path get the name of the choosen file string targetFolder = Path.Combine(sourcePath, Path.GetFileNameWithoutExtension(sourceFile)); if(!Directory.Exists(targetFolder)) { Directory.CreateDirectory(targetFolder); } }
Antworten
-
Hi,
falls Du meinst, dass man bspw. im Windows Explorer über "Öffnen mit..." eine Datei mit deiner Anwendung öffnen soll, lies mal in deiner Main Methode die übergebenen Argumente (stehen bei dir in der args Variable) aus. Dort steht, wenn nichts weiter gemacht wurde, der vollständige Pfad der Datei drin, für die "Öffnen mit ..." ausgewählt wurde.
Falls Du einen für einen Dateityp generell deine Anwendung als Standardanwendung registrieren willst, schau mal hier:
https://sarveshknet.wordpress.com/2012/07/24/associate-file-extension-with-application/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Sonntag, 22. Mai 2016 15:09
- Als Antwort vorgeschlagen Elmar BoyeEditor Montag, 23. Mai 2016 10:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 2. Juni 2016 08:16
Alle Antworten
-
Hallo Roger,
in einem Konsolen-Programm müsstest Du den Pfad über Console.ReadLine einlesen sowie über Directory.Exists testen, ob es ein gültiges Verzeichnis ist.
Komfortabler mit Benutzerführung ginge es erst mit Windows Forms oder WPF, in dem Du den Datei-Öffnen-Dialog (WPF / Windows Forms) oder den Verzeichnis-Auswahl-Dialog (WPF + Windows Forms) verwendest.
Was die Ausführung angeht:
Du kannst sowohl eine Datei über ihre Erweiterung ausführen lassen, in dem Du die UseShellExecute-Eigenschaft auf wahr setzt. Dabei kommt das gleiche Prinzip wie im Windows Explorer zum Tragen. Windows schaut nach, ob ein ausführbares Programm für die Erweiterung registriert ist und verwendet diese.
Alternativ geht ebenso ein festes Programm zu verwenden und ihm den Dateinamen als Arguments zu übergeben. Was man im allgemeinen tut, wenn man nicht die Standard-Anwendung verwenden will. Dabei sollte der Dateiname in Anführungszeichen gesetzt werden, für den Fall das Leer- oder Sonderzeichen darin vorkommen - das gilt auch für den Programmnamen.
Um sicher zu gehen, dass auch bei relativen Dateinamen die richtige Datei verwendet wird, sollte man immer das WorkingDirectory setzen.
Gruß Elmar
-
Hallo Elmar,danke für deine schnelle Antwort.Wenn ich das richtig verstanden habe und davon ausgehe, dass in einer Konsolenanwendung zu realisieren, bleibt mir nur folgende Möglichkeit: Den Pfad per "Hand" in die Konsole über Console.ReadLine einlesen? Oder was meinst du mit Argumente übergeben (das muss ich ja dann auch händisch machen, oder übernimmt er irgendwie automatisch den Pfad der .txt-Datei, auf die gerade die EXE angewendet wurde als Argument)? Wenn das so ist, wäre das natürlich nicht so benutzerfreundlich...:(Danke.Gruß Roger
-
Hallo Roger,
was die Eingabe eingeht ist eine Konsole sehr eingeschränkt - vergleichbar der Windows Eingabe-Aufforderung ohne Extras. ReadLine liest zuerst mal alles ein - ob es das Richtige ist, musst Du selbst prüfen.
Die Geschichte mit dem Argument bezieht sich auf den zweiten Teil Deiner Frage, also dem Ausführen dessen was Du durch Konstante bzw. Eingabe übergibst.
Man kann entweder "C:\Pfad\ProgrammName.EXE" "C:\Users\Public\Documents\Datei.txt" übergeben, wodurch die Datei durch ProgrammName geöffnet wird.
Oder aber "C:\Users\Public\Documents\Datei.txt", womit man Windows entscheiden lässt, welches Programm die Datei Endung ".txt" öffnet - im Standard wäre es notepad.exe.
Das kann man über den Explorer oder auch die Eingabeaufforderung testen.
Gruß Elmar
-
Hallo Elmar,dann habe ich mich falsch ausgedrückt, sorry.Also der Anwender soll letztendlich nichts anderes machen, also "Rechtsklick" auf die Datei (z.B. .txt-Datei) und statt mit dem Editor eben mit der EXE öffnen.Ich möchte nicht, dass die Anwender (diese sind noch mehr Laie als ich) irgendwas in die Konsole eingeben muss. Ist es trotzdem möglich, an den Pfad zu kommen, auf die die EXE in diesem Moment angewendet wird?Fragen über Fragen, aber leider finde ich dazu bisher nichts in diversen Foren....vielleicht suche ich auch nach den falschen Stichwörtern. Danke nochmals.Gruß
-
Hallo Roger,
das funktioniert mit einer Konsolen-Anwendung nicht (so ohne weiteres).
Klicken ist in der Kommandozeile nicht vorgesehen. Erweiterungen, die z. B. die Dateien aus dem aktuellen Verzeichnis vorschlagen - wie die TAB-Taste in der Eingabeaufforderung -, dürften Deine derzeitigen Programmierkünste übersteigen.
Wenn Du nicht zwangsweise (Schule etc.) auf eine Konsolen-Anwendung festgenagelt bist, probiere mal den Weg über eine WPF Anwendung - den Code aus dem oben genannten Link kannst Du zu Anfang übernehmen. Damit kannst Du weitere Dinge ausprobieren, die mit Dateien zusammenhängen.
Eine Rückbau auf eine Konsolen-Anwendung ist mit dem so gewonnen Wissen leichter möglich - nur eine Auswahl ist dort komplex.
Gruß Elmar
-
Hi,
falls Du meinst, dass man bspw. im Windows Explorer über "Öffnen mit..." eine Datei mit deiner Anwendung öffnen soll, lies mal in deiner Main Methode die übergebenen Argumente (stehen bei dir in der args Variable) aus. Dort steht, wenn nichts weiter gemacht wurde, der vollständige Pfad der Datei drin, für die "Öffnen mit ..." ausgewählt wurde.
Falls Du einen für einen Dateityp generell deine Anwendung als Standardanwendung registrieren willst, schau mal hier:
https://sarveshknet.wordpress.com/2012/07/24/associate-file-extension-with-application/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Sonntag, 22. Mai 2016 15:09
- Als Antwort vorgeschlagen Elmar BoyeEditor Montag, 23. Mai 2016 10:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 2. Juni 2016 08:16