Eigene Dateiendung automatisch öffnen



  • Hallo,

    ich habe zum Einstieg mit VC++ 2005 (.NET Framework) einen kleinen Texteditor geschrieben.
    Wenn ich den Editor gestartet habe, kann ich über ein Menu "Datei -> öffnen" auch Dateien in den Editor laden.

    Allerdings möchte ich meine eigene Dateiendung entwerfen und diese dann auch automatisch mit meinem Programm öffnen können.

    Ich habe also zu Testzwecken mal die Dateiendung .abc genommen.
    Da mein Betriebssystem diese Endung nicht kennt, fragt es mich mit welchem Programm es die Datei öffnen soll.
    Jetzt kann ich mein Programm angeben und dann wird mein Programm ja auch gestartet.
    Soweit ist das alles kein Problem.

    Aber ich möchte, dass dann der Inhalt der Datei auch direkt in mein Programm geladen wird.
    Also so, wie es bei jedem anderen Texteditor (z.B. Notepad) der Fall ist.
    Da muss man ja nicht auch nochmal extra auf "Datei -> öffnen" gehen.

    Kann mir da jemand weiterhelfen ?

    Viele Grüße, Tom



  • Wird der Dateipfad nicht als Argument für main übergeben?



  • also bis jetzt nicht

    bzw. ich weiß nicht genau wie ich das mache 🙂
    ich hab es noch nicht geschafft mir den dateinamen bzw. den pfad ausgeben zu lassen (wenn ich das programm durch doppelklick auf die .abc datei gestartet hab)



  • T_om schrieb:

    also bis jetzt nicht

    bzw. ich weiß nicht genau wie ich das mache 🙂

    Das sollte ja auch automatisch geschehen und in args[0] landen.
    Kannst du ja einfach im Debugger überprüfen.



  • ich probiers grad mit GetCommandLineArgs

    das problem ist, dass ich diesen Wert nicht im Debug-Modus abfragen kann, weil der wert (zB der pfad der datei) ja nur an die compilierte ausführbare datei übergeben wird..



  • in jedem normalen compiler kann man die argumente in den einstellungen dem debugger mitgeben {o;



  • Ich gehe jetzt einmal davon aus, dass du eine WinForms-Anwendung hast:

    In deinem Projekt befindet sich eine Datei namens "Program.cs". Darin ist die Methode "Main()" wie folgt deklariert:

    static void Main()
    {
    ...
    

    Ändere das Ganze einmal in:

    static void Main(string[] args)
    {
    ...
    

    Jetzt solltest du in args[0] den Pfad zu deiner Datei finden.
    Willst du auch beim Debuggen einen Pfad haben kannst du in den Projekteinstellungen unter "Debuggen" Befehlszeilenargumente übergeben.



  • so

    ich habs jetzt gelöst

    für alle die es interessiert, ein Beispiel das die "angeklickte" Datei ausgibt:

    String^ str = Environment::CommandLine;
    array<String> parameter = str->Split('"');
    MessageBox::Show(parameter[3]);

    "Commandline" übergibt eine Zeichenkette bestehend aus: "Pfad des Programms" "Pfad der Datei"

    mit "split" teil ich diese zeichenkette auf und kann damit meinen gewünschten Dateipfad zum öffnen nutzen

    mit einer einfachen überprüfung der länge des arrays mit "parameter->Lenght" kann ich dann entscheiden ob das Programm direkt gestartet wurde (Length=3) oder durch das anklicken der Datei (Length=5)

    vielen dank für alle antworten und hilfen

    viele grüße, tom



  • Na dann sind wir ja alle mal gespannt was passiert wenn ein Leerzeichen im Pfad ist, oder sind Zeichen im Split() entfernt worden?



  • ehm - nur so nebenbei

    Strin^ :: array<>^ -> das ist eher C++/CLI als C#



  • oh...

    ich hatte .NET gesehen und ehrlich gesagt ist mir das C# nicht so wirklich aufgefallen..

    sorry leute 🙂
    nächstes mal pass ich besser auf

    trotzdem danke


Anmelden zum Antworten