C/C++, Öffnen mit, Dateiendung

  • C/C++, Öffnen mit, Dateiendung

    Hallo,

    ich bin neu hier im Forum und auch neu bei der OS X-Programmierung und habe auch schon mal die erste Frage.

    Ich habe eine Plattformunabhängiges C-Programm geschrieben, mit dem Dateien mit der Endung .torrent geöffnet werden sollen. Unter Windows und Linux funktioniert das Ganze bereits.
    Bei Windoof und Linux wird ja der Pfad zu der .torrent-Datei über den Parameter in char *argv[1] übergeben.

    Unter OS X habe ich bereits ein Applicationbundle erstellt, so dass mein Programm im Auswahlmenü erscheint, wenn man mit rechts auf eine .torrent-Datei klickt und auf "öffnen mit" geht.

    Wie ich bereits festgestellt habe, wird unter OS X der Pfad zu der .torrent-Datei nicht über char *argv[1] übergeben.

    Kann mir jemand sagen, wie ich nun an den Pfad der Datei komme?


    Schon mal vielen Dank im Voraus
  • haha, ja das ist wirklich recht einfach und komisch dass niemand geantwortet hat!

    Also es gibt das Application-delegate application:openFile: bzw application:openFiles:

    dort bekommst du die pfade die du öffnen sollst.

    du solltest aber deinem programm auch noch ein eigenes icon für die torrentdateien beilegen und den torrent-dateityp als viewable-dateiformat in deiner app eintragen dann brauchst du nicht das "öffnen mit" sondern ein doppelklick reicht! Wie genau man das macht steht in jedemenge tutorials und bei abble in der doku und sonst eben bei google oder hier im forum!
  • Original von gritsch
    haha, ja das ist wirklich recht einfach und komisch dass niemand geantwortet hat!

    Also es gibt das Application-delegate application:openFile: bzw application:openFiles:

    dort bekommst du die pfade die du öffnen sollst.

    du solltest aber deinem programm auch noch ein eigenes icon für die torrentdateien beilegen und den torrent-dateityp als viewable-dateiformat in deiner app eintragen dann brauchst du nicht das "öffnen mit" sondern ein doppelklick reicht! Wie genau man das macht steht in jedemenge tutorials und bei abble in der doku und sonst eben bei google oder hier im forum!


    Wollte er nicht ein platformübergreifendes C-Programm haben?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von gritsch
    ne, er hat ja ein application-bundle!


    Und? Soweit ich weiß kann er doch auch ein normales C-Programm in ein Application Bundle packen. Es muss ja nicht unbedingt ein Objective-C Programm sein.

    Er schreibt ja: "Ich habe eine Plattformunabhängiges C-Programm geschrieben" ... "Unter OS X habe ich bereits ein Applicationbundle erstellt, so dass mein Programm im Auswahlmenü erscheint" - da steht nichts von "Objective-C" oder "Cocoa".

    aleister: Klär uns auf :)
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von gritsch
    ja und warum sollte er das dann in ein bundle packen?

    ich denk mal eher dass er über das bundle sein C-programm mit den entsprechenden parametern aufrufen will. also dass der user nicht das terminal bemühen muss


    Er packt das Programm in ein Bundle, dass der User ein schönes Icon sieht.

    Ich kenne das halt vom Qt Framework von Trolltech. Unter Windows und Linux erzeugt Qt normale Binaries und unter OS X wird ein Application Bundle erzeugt und die Binary (die ja in C++ geschrieben ist) in das Bundle gelegt, sodass sich die Qt Anwendung etwas mehr in das OS X System integriert. Es ist also durchaus üblich Programme, die nicht mit Objective-C/Cocoa sondern mit reinem C/C++ erstellt wurden in ein Application Bundle zu packen.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von gritsch
    und woher soll man wissen was der fragesteller will?

    soll er sich doch klarer ausdrücken... und sich nicht über mangelnde antworten aufregen ;)


    Naja - angenommen er nutzt in seinem Programm Obj-C - dann hat er jetzt die Antwort. Falls er reines C nutzt, dann wird er sich schon wieder melden. :)
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von gritsch
    und woher soll man wissen was der fragesteller will?

    soll er sich doch klarer ausdrücken... und sich nicht über mangelnde antworten aufregen ;)

    Wie klar soll er sich, denn noch ausdrücken als er es ohnehin schon tut im ersten Post? Da stehen alle Informationen, die man wissen musss...
  • Original von TerminalX
    Original von gritsch
    und woher soll man wissen was der fragesteller will?

    soll er sich doch klarer ausdrücken... und sich nicht über mangelnde antworten aufregen ;)

    Wie klar soll er sich, denn noch ausdrücken als er es ohnehin schon tut im ersten Post? Da stehen alle Informationen, die man wissen musss...


    ja dann antworte doch du ihm - nicht nur klugscheißen!
  • Hallo,

    danke für die Antworten. Ich hätte mich vielleicht etwas genauer ausdrücken sollen.

    Das Programm selbst ist Plattformunabhängig. Damit das Ganze benutzerfreundlich wird,(z.B. mit Icon,...) werde ich das Programm in ein App-Bundle reinlegen müssen. Oder gibt es da andere Möglichkeiten?
    Bestimmte Dinge lassen sich leider nicht Plattformübergreifend machen.
  • Original von aleister
    Hallo,

    danke für die Antworten. Ich hätte mich vielleicht etwas genauer ausdrücken sollen.

    Das Programm selbst ist Plattformunabhängig. Damit das Ganze benutzerfreundlich wird,(z.B. mit Icon,...) werde ich das Programm in ein App-Bundle reinlegen müssen. Oder gibt es da andere Möglichkeiten?
    Bestimmte Dinge lassen sich leider nicht Plattformübergreifend machen.


    ich weis nicht ob das so klappt - denke aber nicht denn sosnt hätte schon jemand ne lösung gesagt.
    ich weis auch nicht was das programm genau macht, aber vielleicht wäre ja auch ne kleine GUI dazu nicht unpraktisch.

    eine möglich elösung ist, dass du dir ein programm schreibst welches einfach startet, dann wie von mir beschrieben darauf wartet ein file zu öffnen, dann ruft es einfach dein C-Programm auf (welches in den resourcen deines programms liegt) und schon klappt es. Ob du das Programm dann mit ner GUI versiehst oder nicht, ist deine sache!
  • RE: C/C++, Öffnen mit, Dateiendung

    Original von aleister
    Wie ich bereits festgestellt habe, wird unter OS X der Pfad zu der .torrent-Datei nicht über char *argv[1] übergeben.

    Kann mir jemand sagen, wie ich nun an den Pfad der Datei komme?


    Das ist in der Tat eine interessante Frage...
    Irgendwoher muss ein Obj-C Programm zum Beispiel wissen, welche Datei es über den 'öffnen mit...' Eintrag öffnen sollte.
    Was enthält argv[1] denn?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • RE: C/C++, Öffnen mit, Dateiendung

    Original von Lucas de Vil
    Original von aleister
    Wie ich bereits festgestellt habe, wird unter OS X der Pfad zu der .torrent-Datei nicht über char *argv[1] übergeben.

    Kann mir jemand sagen, wie ich nun an den Pfad der Datei komme?


    Das ist in der Tat eine interessante Frage...
    Irgendwoher muss ein Obj-C Programm zum Beispiel wissen, welche Datei es über den 'öffnen mit...' Eintrag öffnen sollte.
    Was enthält argv[1] denn?


    nee, argv[] kommt ja im main als übergabearameter. das was mit "öffnen mit" übergeben wird, kommt wie gesagt beim App-delegate an!