Seite 1 von 1

Ausführbare Datei erkennen ?

Verfasst: 24.11.2014 23:49
von Vera
Hallo,
für mein LauncherPrpjekt möchte ich gerne zwischen ausführbaren Dateien und nicht-ausführbaren Dateien unterscheiden können, denn die RunProgram-Aufrufe sind unterschiedlich.

Eine ausführbare Datei läßt sich direkt aufrufen, während eine normale Datei den Befehl für das zu verwendende Standartprogram bräuchte.

Code: Alles auswählen

RunProgram("/DateiPfad/Program") 
RunProgram("xdg-open", "/DateiPfad/Datei", "") 
Ein GetFileType() sozusagen 8)

Grüß ~ Vera

Verfasst: 24.11.2014 23:58
von CodeCommander
~ DELETE ~

Re: Ausführbare Datei erkennen ?

Verfasst: 25.11.2014 00:56
von Vera
Danke Dir :-)

Die Idee mit dem Ausschluß ist gut ... aber scheinbar nicht für alle Dateien geeignet. XML würde bei mir so nicht geöffnet, da es auch 0 zurück gibt.

Aber beim hin&her Testen habe ich nun festgestellt, dass man scheinbar ohne Probleme eine ausführbare Datei, auch mit dem Zusatz 'öffne mit default Programm' erfolgreich aufrufen kann.

Find' ich ja nicht gerade stimmig, doch wenn's so auch läuft, dann übernehm ich's gerne.

cheers ~ Vera

Re: Ausführbare Datei erkennen ?

Verfasst: 25.11.2014 08:05
von ts-soft
Ob eine Datei "Ausführbar" ist, erkennt man am Dateiattribut "ausführen" ("exec").
Siehe Hilfe.

Re: Ausführbare Datei erkennen ?

Verfasst: 25.11.2014 09:05
von Vera
Ja, die Dateiattribute hatte ich, bevor ich gefragt habe, alle an unterschiedlichsten Dateien ausprobiert, und natürlich sind sie alle gleichermaßen 'ausführbar', es sei denn zB die Rechte wären beschränkt.

Damit lassen sich jedoch die Dateitypen nicht differenzieren.

Glaub nicht, ich hätte die Hilfe nicht vorher durchsucht und ausser DirectoryEntryAttributes() und GetFileAttributes() war da nichts angeboten.

Re: Ausführbare Datei erkennen ?

Verfasst: 25.11.2014 12:15
von ts-soft
Versteh ich nicht.

Eine ausführbare Datei, ähnlich einer Exe unter Windows, hat ein Dateiattribut ala: #PB_FileSystem_ExecUser oder
#PB_FileSystem_ExecAll und ist somit "ausführbar". Dies ist nicht an einer bestimmten Dateiextension erkennbar, sondern
kann auch jede z.B. Textdatei sein. Bei einer Textdatei wird dann der folgende Text interpretiert: "#!/bin/bash" in der ersten
Zeile. Das heißt, der Text sollte mit der bash ausgeführt werden, hier kann aber auch alles mögliche andere stehen.

Alle Dateien, die kein "Ausführen" Attribut haben, müssen dann über "xdg-open", so es denn installiert ist, ausgeführt werden.
Dies setzt aber voraus, das der Mime-Typ bekannt ist und unterstützt wird. Unter neueren Linux-Distributionen ist das im
allgemeinen der Fall.

Gruß
Thomas

Re: Ausführbare Datei erkennen ?

Verfasst: 25.11.2014 14:10
von Vera
Hi, ich habe meinen Versuchsaufbau nochmal erstellt:

Code: Alles auswählen

Value.l = GetFileAttributes("/path/to/file") 
   
If Value = -1 
    Debug "Fehler beim Lesen der Datei-Attribute!"
  Else 
    If Value & #PB_FileSystem_ReadUser   : txt$ + "ru-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_WriteUser  : txt$ + "wu-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_ExecUser   : txt$ + "exU-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_ReadGroup  : txt$ + "rg-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_WriteGroup : txt$ + "wg-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_ExecGroup  : txt$ + "exG-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_ReadAll    : txt$ + "ra-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_WriteAll   : txt$ + "wa-" : Else : txt$+"-0-" : EndIf 
    If Value & #PB_FileSystem_ExecAll    : txt$ + "exA-" : Else : txt$+"-0-" : EndIf 
  Debug txt$ 
 EndIf
und an diversen Dateien ausprobiert und diese Ergebnisse erhalten:
; ru-wu-exU-rg--0-exG-ra--0-exA- ... ausführbar
; ru-wu--0-rg--0--0-ra--0--0- ... pb
; ru-wu--0-rg--0--0-ra--0--0- ... html
; ru-wu--0-rg--0--0-ra--0--0- ... ini
; ru-wu--0-rg--0--0-ra--0--0- ... txt
; ru-wu--0-rg--0--0-ra--0--0- ... Text ohne extension
; ru-wu-exU-rg--0-exG-ra--0-exA- ... ausführbar
; ru-wu-exU-rg--0-exG-ra--0-exA- ... ausführbar
; ru-wu-exU-rg-wg-exG-ra-wa-exA- ... xml
; ru-wu-exU-rg-wg-exG-ra-wa-exA- ... png
; ru-wu-exU-rg-wg-exG-ra-wa-exA- ... bmp
; ru-wu-exU-rg-wg-exG-ra-wa-exA- ... wav
Da fragt sich doch, ob ich nicht besser den Aufruf mit default-Anwendung nutze, da es bei ausführbaren Programmen ja scheinbar keine Probleme macht? ... während aber im anderen Fall, mit der obigen If-Schleife zB eine xml nicht geöffnet würde

Das mit dem Mime-Typ ist mir bewußt. Dazu hatte ich in der LinuxApiLib schon eine Routine gefunden, mit der man das zugeordnete Programm ermitteln könnte. Das sprengt aber an dieser Stelle meinen simplen LauncherAnsatz und lass das erstmal unberücksichtigt.

Zunächt war mir nur grundsätzlich wichtig, dass es nicht ausschließlich nur für aufzurufende Anwendungen funktioniert, sondern mehr oder weniger für alle Dateien.

LG ~ Vera