Seite 1 von 2

Verschiedene Systempfade für Win&Mac - aber wie für Linux

Verfasst: 03.12.2015 19:24
von GPI
Bei jeden System gibts es Verzeichnisse wie Dokumente, Music, Video, Downloads etc. Diese kann man auch schön abfragen, für Mac und Windows ist das für mich kein Problem
Mein Code bisher:

Der Windows-Code benötigt minimum Vista! - anders kommt man an den Downloads-Ordner nicht heran bzw. der existiert vorher auch nicht. Da XP/2000 eh veraltet sind und man die nicht mehr verwenden sollte, ist das ganze imo weniger Problematisch.

Code: Alles auswählen

;    Description: Find several System/User default folders
;         Author: GPI
;           Date: 04-12-2015
;     PB-Version: 5.40
;             OS: Windows, Linux, Mac
;  English-Forum: 
;   French-Forum: 
;   German-Forum: 
; -----------------------------------------------------------------------------

DeclareModule Directory
  Global Program.s;Need Admin/Root-Rights for Windows & Linux
  Global Documents.s
  Global Desktop.s
  Global Downloads.s
  Global ProgramData.s
  Global AllUserData.s;On Linux you must create with root rights a folder here and give access for everybody.
  Global Movies.s
  Global Music.s
  Global Pictures.s
  Global Public.s
  Global Temporary.s
  Global Home.s
EndDeclareModule

Module Directory
  EnableExplicit
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_MacOS;{      
      Procedure.s GetPath(NSSearchPathDirectory,NSDomainMask)        
        Protected ret.s
        Protected x,y,z
        Protected FileManager
        Protected URLArray
        FileManager = CocoaMessage(0, 0, "NSFileManager defaultManager")
        URLArray = CocoaMessage(0, FileManager,
                                "URLsForDirectory:", NSSearchPathDirectory,
                                "inDomains:", NSDomainMask)
        If URLArray          
          If CocoaMessage(0,URLArray,"count")=1
            x=CocoaMessage(0, URLArray, "objectAtIndex:", 0)
            y=CocoaMessage(0, x, "path")
            z=CocoaMessage(0, y,"UTF8String")
            ret= PeekS(z, -1, #PB_UTF8)+"/";PB always has a slash at the end
          EndIf
        EndIf
        ProcedureReturn ret
      EndProcedure
      Macro _Create(xx,cc,dd=#NSUserDomainMask)
        xx=GetPath(cc,dd)
      EndMacro
      _Create(Program,#NSApplicationDirectory)
      _Create(Documents,#NSDocumentDirectory)
      _Create(Desktop,#NSDesktopDirectory)
      _Create(Downloads,#NSDownloadsDirectory)
      _Create(ProgramData,#NSApplicationSupportDirectory)
      _Create(AllUserData,#NSApplicationSupportDirectory,#NSLocalDomainMask)
      _Create(Movies,#NSMoviesDirectory)
      _Create(Music,#NSMusicDirectory)
      _Create(Pictures,#NSPicturesDirectory)
      _Create(Public,#NSSharedPublicDirectory)
      ;}
      
    CompilerCase #PB_OS_Windows;{      
      Prototype Prot_SHGetKnownFolderPath(rfid,dwFlags,hToken,*pppszPath) 
      Define shell32dll=OpenLibrary(#PB_Any, "shell32.dll")
      Global SHGetKnownFolderPath_.Prot_SHGetKnownFolderPath=GetFunction(shell32dll, "SHGetKnownFolderPath")
      
      Procedure.s GetPath(*FOLDERID)
        Protected Path
        Protected ret.s        
        If SHGetKnownFolderPath_(*FOLDERID,0,0,@Path)=#S_OK And Path
          ret=PeekS(Path,-1,#PB_Unicode)+"\"
          CoTaskMemFree_(path)
        EndIf
        ProcedureReturn ret
      EndProcedure

      Macro _Create(xx,cc,d1,d2,d3,d4,d5)
        DataSection
          cc:
          Data.l $d1
          Data.w $d2,$d3
          Data.b ($d4>>8)&$ff,($d4)&$ff
          Data.b ($d5>>(5*8))&$FF,($d5>>(4*8))&$FF,($d5>>(3*8))&$FF,($d5>>(2*8))&$FF,($d5>>(1*8))&$FF,$d5&$FF
        EndDataSection
        xx=GetPath(?cc)
      EndMacro
      _Create(Program,FOLDERID_ProgramFiles,905e63b6,c1bf,494e,b29c,65b732d3d21a)
      _Create(Documents,FOLDERID_Documents,FDD39AD0,238F,46AF,ADB4,6C85480369C7)
      _Create(Desktop,FOLDERID_Desktop,B4BFCC3A,DB2C,424C,B029,7FE99A87C641)
      _Create(Downloads,FOLDERID_Downloads,374DE290,123F,4565,9164,39C4925E467B)
      _Create(ProgramData,FOLDERID_RoamingAppData,3EB685DB,65F9,4CF6,A03A,E3EF65729F3D)
      _Create(AllUserData,FOLDERID_ProgramData,62AB5D82,FDC1,4DC3,A9DD,070D1D495D97)
      _Create(Movies,FOLDERID_Videos,18989B1D,99B5,455B,841C,AB7C74E4DDFC)
      _Create(Music,FOLDERID_Music,4BD8D571,6D19,48D3,BE97,422220080E43)
      _Create(Pictures,FOLDERID_Pictures,33E28130,4E1E,4676,835A,98395C3BC3BB)
      _Create(Public,FOLDERID_PublicDocuments,ED4824AF,DCE4,45A8,81E2,FC7965083634)
      ;}
      
    CompilerCase #PB_OS_Linux
      Define ff
      Define key.s,line.s,path.s
      Define pos_equal,pos_quote1,pos_quote2
      FF  = ReadFile(#PB_Any, GetHomeDirectory() + ".config/user-dirs.dirs")
      ;ff=ReadFile(#PB_Any,"E:\purebasic\Temp\user-dirs.dirs")
      If FF
        While Not Eof(FF)
          line = ReadString(FF, #PB_UTF8)
          If Left(line,1)<>"#"
            
            pos_equal=FindString(line,"=")
            pos_quote1=FindString(line,~"\"",pos_equal+1)
            pos_quote2=FindString(line,~"\"",pos_quote1+1)
            If pos_equal And pos_quote1 And pos_quote1<pos_quote2
              key.s=UCase(Trim(Left(line,pos_equal-1)))
              path.s=Mid(line,pos_quote1+1,pos_quote2-pos_quote1-1)+"/"        
              path=ReplaceString(path,"$HOME/",GetHomeDirectory())
              Select key
                Case "XDG_DOCUMENTS_DIR":Documents=path
                Case "XDG_DESKTOP_DIR":Desktop=path
                Case "XDG_DOWNLOAD_DIR":Downloads=path
                Case "XDG_VIDEOS_DIR":Movies=path
                Case "XDG_MUSIC_DIR":Music=path
                Case "XDG_PICTURES_DIR":Pictures=path
                Case "XDG_PUBLICSHARE_DIR":Public=path
              EndSelect
              
            EndIf
          EndIf
          
        Wend
        CloseFile(FF)
      EndIf
      ProgramData=GetHomeDirectory()+"."
      Program="/usr/local/bin/";https://wiki.ubuntuusers.de/Verzeichnisstruktur
      AllUserData="/var/local/";http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/var.html
      
  CompilerEndSelect
  Temporary= GetTemporaryDirectory()
  Home= GetHomeDirectory()
EndModule

;-Example
CompilerIf #PB_Compiler_IsMainFile
  Debug Directory::Program
  Debug Directory::Documents
  Debug Directory::Desktop
  Debug Directory::Downloads
  Debug Directory::ProgramData
  Debug Directory::AllUserData
  Debug Directory::Movies
  Debug Directory::Music
  Debug Directory::Pictures
  Debug Directory::Public
  Debug Directory::Temporary
  Debug Directory::Home
  
  Debug "----"
  Debug "Pictures-Directory:"
  path.s=Directory::Pictures
  dir=ExamineDirectory(#PB_Any,path,"*.*")
  If dir
    While NextDirectoryEntry(dir)
      Debug "  "+DirectoryEntryName(dir)+" "+DirectoryEntryType(dir)
    Wend
    FinishDirectory(dir)
  EndIf
CompilerEndIf
Dazu zwei Fragen:
a)Passt der Mac-Code so? Wenn ich das richtig sehe, hab ich Objecte erzeugt, aber ich hab keine Ahnung, ob man die vernichten muss - und wenn ja wie.

b) Wie löse ich das mit Linux? Ich hab keine Ahnung und auch kein System zum testen.

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 21:27
von ts-soft
Es wäre ja für Linux relativ leicht, aber die Bezeichnungen sind leider der Sprache angepaßt.
Meist einfach im Homeverzeichnis ein Unterverzeichnis, aber die Bezeichnung ist nicht so einfach:
http://www.linuceum.com/Distros/osFilesystem.php

Code: Alles auswählen

; English-Systems:
Debug GetHomeDirectory() + "Pictures/"
; German-Systems:
Debug GetHomeDirectory() + "Bilder/"
Alles andere dann auf http://standards.freedesktop.org/basedi ... 01s02.html

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 21:33
von GPI
Es gibt für Linux ernsthaft keine API um die Pfad abzufragen - besonders wenn sie von System zu System verschieden und lokalisiert sein können?

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 21:39
von RSBasic
Das wäre wirklich suboptimal, wenn es sowas nicht geben würde.
Da ich kein Linux habe und davon keine Ahnung habe, habe ich mal gegoogelt und fand diesen Artikel:
https://wiki.ubuntuusers.de/Homeverzeichnis hat geschrieben: Vorgegebene Verzeichnisse

xdg-user-dirs ist ein Werkzeug, um gewisse Vorgaben für Programme zu schaffen, wo sie ihre Daten ablegen sollen. So wird hier beispielsweise der Pfad zur Arbeitsfläche (früher Desktop) oder Ordner für Musik oder Video-Dateien definiert.

Diese Verzeichnisse gelten über Desktop-Umgebungen hinweg, solange sich diese an die Normen von freedesktop.org halten. Die Verzeichnisse werden über die Konfigurationsdatei ~/.config/user-dirs.dirs festgelegt. So bezeichnen alle Desktop-Umgebungen immer den Ordner ~/Schreibtisch oder ~/Arbeitsfläche (früher auch ~/Desktop) als Desktop usw. Die Standardeinstellungen für neu angelegte Benutzer bei Ubuntu 14.04 lauten beispielsweise:

Code: Alles auswählen

XDG_DESKTOP_DIR="$HOME/Schreibtisch"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Vorlagen"
XDG_PUBLICSHARE_DIR="$HOME/Öffentlich"
XDG_DOCUMENTS_DIR="$HOME/Dokumente"
XDG_MUSIC_DIR="$HOME/Musik"
XDG_PICTURES_DIR="$HOME/Bilder"
XDG_VIDEOS_DIR="$HOME/Videos"
Die Pfade werden bei manchen Ubuntu-Versionen automatisch aktualisiert. Ansonsten hilft es, sich ab- und wieder neu anzumelden. Nennt man beispielsweise den Ordner ~/Bilder in ~/Pictures um, so wird der Eintrag in user-dirs.dirs automatisch aktualisiert. Da man sich darauf aber nicht immer verlassen kann, wird empfohlen, nach der Umbenennung eines Ordners diese Datei zumindest zu kontrollieren und gegebenenfalls nachzubessern. Die Verzeichnisnamen lassen sich auch sehr einfach über die graphische Oberfläche von Ubuntu Tweak festlegen.
Man muss also die Umgebungsvariable "XDG_PICTURES_DIR" auslesen, die sich in der Datei "/.config/user-dirs.dirs" befindet.
Es gibt bestimmt auch eine API-Funktion zum Auslesen eines Pfades mit Hilfe einer Umgebungsvariable. Sowas muss geben.

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 22:43
von ts-soft

Code: Alles auswählen

EnableExplicit

Define.s XDG_DESKTOP_DIR, XDG_DOWNLOAD_DIR, XDG_TEMPLATES_DIR, XDG_PUBLICSHARE_DIR
Define.s XDG_DOCUMENTS_DIR, XDG_MUSIC_DIR, XDG_PICTURES_DIR, XDG_VIDEOS_DIR

Define FF, string.s, tmp.s

FF  = ReadFile(#PB_Any, GetHomeDirectory() + ".config/user-dirs.dirs")
If FF
  While Not Eof(FF)
    string = ReadString(FF, #PB_UTF8)
    If Left(string, 4) = "XDG_"
      tmp = StringField(string, 1, "=")
      Select tmp
        Case "XDG_DESKTOP_DIR"
          XDG_DESKTOP_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_DESKTOP_DIR = ReplaceString(XDG_DESKTOP_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_DOWNLOAD_DIR"
          XDG_DOWNLOAD_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_DOWNLOAD_DIR = ReplaceString(XDG_DOWNLOAD_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_TEMPLATES_DIR"
          XDG_TEMPLATES_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_TEMPLATES_DIR = ReplaceString(XDG_TEMPLATES_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_PUBLICSHARE_DIR"
          XDG_PUBLICSHARE_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_PUBLICSHARE_DIR = ReplaceString(XDG_PUBLICSHARE_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_DOCUMENTS_DIR"
          XDG_DOCUMENTS_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_DOCUMENTS_DIR = ReplaceString(XDG_DOCUMENTS_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_MUSIC_DIR"
          XDG_MUSIC_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_MUSIC_DIR = ReplaceString(XDG_MUSIC_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_PICTURES_DIR"
          XDG_PICTURES_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_PICTURES_DIR = ReplaceString(XDG_PICTURES_DIR, "$HOME/", GetHomeDirectory()) + "/"
        Case "XDG_VIDEOS_DIR"
          XDG_VIDEOS_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
          XDG_VIDEOS_DIR = ReplaceString(XDG_VIDEOS_DIR, "$HOME/", GetHomeDirectory()) + "/"
      EndSelect
    EndIf
  Wend
  CloseFile(FF)
EndIf

Debug "Desktop = " + XDG_DESKTOP_DIR
Debug "Video = " + XDG_VIDEOS_DIR
Ich hoffe das hilft schon mal. Wenn noch mehr Pfade fehlen, dann bitte melden. Die stehen dann aber woanders.
Besser wäre es, vorher schon mal auf freedesktop.org nach zu schauen, da steht alles ist aber mit viel sucherei
verbunden :mrgreen:

Gruß
Thomas

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 22:47
von RSBasic
:allright:

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 03.12.2015 22:55
von ts-soft
Mußte es nochmals anpassen, jetzt sollte es stimmen. Naja, man wird älter und die Augen schlechter :mrgreen:

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 04.12.2015 06:24
von ts-soft
Hier noch der integrierte Code, leider ohne Program() und ProgramData(). Sowas gibt es eigentlich so direkt nicht.
Auf Macros hab ich auch verzichtet, die machen mir immer Knoten im Hirn :mrgreen:

Code: Alles auswählen

DeclareModule Directory
  Declare.s Program()
  Declare.s Documents()
  Declare.s Desktop()
  Declare.s Downloads()
  Declare.s ProgramData()
  Declare.s Movies()
  Declare.s Music()
  Declare.s Pictures()
  Declare.s Public()
  Declare.s Temp()
  Declare.s Home()
EndDeclareModule

Module Directory
  EnableExplicit
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_MacOS
      
      Procedure.s GetPath(NSSearchPathDirectory)       
        Protected ret.s
        Protected c,x,y,z
        Protected FileManager
        Protected URLArray
        FileManager = CocoaMessage(0, 0, "NSFileManager defaultManager")
        URLArray = CocoaMessage(0, FileManager,
                                "URLsForDirectory:", NSSearchPathDirectory,
                                "inDomains:", #NSUserDomainMask)
        If URLArray
          c=CocoaMessage(0,URLArray,"count")
          If c=1
            x=CocoaMessage(0, URLArray, "objectAtIndex:", 0)
            y=CocoaMessage(0, x, "path")
            z=CocoaMessage(0, y,"UTF8String")
            ret= PeekS(z, -1, #PB_UTF8) + "/";PB always has a slash at the end
          EndIf
        EndIf
        ProcedureReturn ret
      EndProcedure
      Macro _Create(xx,cc)
        Procedure.s xx()
          ProcedureReturn GetPath(cc)
        EndProcedure
      EndMacro
      _Create(Program, #NSApplicationDirectory)
      _Create(Documents, #NSDocumentDirectory)
      _Create(Desktop, #NSDesktopDirectory)
      _Create(Downloads, #NSDownloadsDirectory)
      _Create(ProgramData, #NSApplicationSupportDirectory)
      _Create(Movies, #NSMoviesDirectory)
      _Create(Music, #NSMusicDirectory)
      _Create(Pictures, #NSPicturesDirectory)
      _Create(Public, #NSSharedPublicDirectory)
      
    CompilerCase #PB_OS_Windows
      
      Prototype Prot_SHGetKnownFolderPath(rfid, dwFlags, hToken, *pppszPath)
      Define shell32dll = OpenLibrary(#PB_Any, "shell32.dll")
      Global SHGetKnownFolderPath_.Prot_SHGetKnownFolderPath = GetFunction(shell32dll, "SHGetKnownFolderPath")
      
      Procedure.s GetPath(*FOLDERID)
        Protected Path
        Protected ret.s       
        If SHGetKnownFolderPath_(*FOLDERID, 0, 0, @Path) = #S_OK And Path
          ret=PeekS(Path, -1, #PB_Unicode) + "\"
          CoTaskMemFree_(path)
        EndIf
        ProcedureReturn ret
      EndProcedure
      
      Macro _Create(xx, cc, d1, d2, d3, d4, d5)
        DataSection
          cc:
          Data.l $d1
          Data.w $d2,$d3
          Data.b ($d4>>8)&$ff,($d4)&$ff
          Data.b ($d5>>(5*8))&$FF,($d5>>(4*8))&$FF,($d5>>(3*8))&$FF,($d5>>(2*8))&$FF,($d5>>(1*8))&$FF,$d5&$FF
        EndDataSection
        Procedure.s xx()
          ProcedureReturn GetPath(?cc)
        EndProcedure
      EndMacro
      _Create(Program,FOLDERID_ProgramFiles,905e63b6,c1bf,494e,b29c,65b732d3d21a)
      _Create(Documents,FOLDERID_Documents,FDD39AD0,238F,46AF,ADB4,6C85480369C7)
      _Create(Desktop,FOLDERID_Desktop,B4BFCC3A,DB2C,424C,B029,7FE99A87C641)
      _Create(Downloads,FOLDERID_Downloads,374DE290,123F,4565,9164,39C4925E467B)
      _Create(ProgramData,FOLDERID_RoamingAppData,3EB685DB,65F9,4CF6,A03A,E3EF65729F3D)
      _Create(Movies,FOLDERID_Videos,18989B1D,99B5,455B,841C,AB7C74E4DDFC)
      _Create(Music,FOLDERID_Music,4BD8D571,6D19,48D3,BE97,422220080E43)
      _Create(Pictures,FOLDERID_Pictures,33E28130,4E1E,4676,835A,98395C3BC3BB)
      _Create(Public,FOLDERID_PublicDocuments,ED4824AF,DCE4,45A8,81E2,FC7965083634)
      
    CompilerCase #PB_OS_Linux
      
      Global.s XDG_DESKTOP_DIR, XDG_DOWNLOAD_DIR, XDG_TEMPLATES_DIR, XDG_PUBLICSHARE_DIR
      Global.s XDG_DOCUMENTS_DIR, XDG_MUSIC_DIR, XDG_PICTURES_DIR, XDG_VIDEOS_DIR
      
      Define FF, string.s, tmp.s
      
      FF  = ReadFile(#PB_Any, GetHomeDirectory() + ".config/user-dirs.dirs")
      If FF
        While Not Eof(FF)
          string = ReadString(FF, #PB_UTF8)
          If Left(string, 4) = "XDG_"
            tmp = StringField(string, 1, "=")
            Select tmp
              Case "XDG_DESKTOP_DIR"
                XDG_DESKTOP_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_DESKTOP_DIR = ReplaceString(XDG_DESKTOP_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_DOWNLOAD_DIR"
                XDG_DOWNLOAD_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_DOWNLOAD_DIR = ReplaceString(XDG_DOWNLOAD_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_TEMPLATES_DIR"
                XDG_TEMPLATES_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_TEMPLATES_DIR = ReplaceString(XDG_TEMPLATES_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_PUBLICSHARE_DIR"
                XDG_PUBLICSHARE_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_PUBLICSHARE_DIR = ReplaceString(XDG_PUBLICSHARE_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_DOCUMENTS_DIR"
                XDG_DOCUMENTS_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_DOCUMENTS_DIR = ReplaceString(XDG_DOCUMENTS_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_MUSIC_DIR"
                XDG_MUSIC_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_MUSIC_DIR = ReplaceString(XDG_MUSIC_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_PICTURES_DIR"
                XDG_PICTURES_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_PICTURES_DIR = ReplaceString(XDG_PICTURES_DIR, "$HOME/", GetHomeDirectory()) + "/"
              Case "XDG_VIDEOS_DIR"
                XDG_VIDEOS_DIR = RemoveString(StringField(string, 2, "="), #DQUOTE$)
                XDG_VIDEOS_DIR = ReplaceString(XDG_VIDEOS_DIR, "$HOME/", GetHomeDirectory()) + "/"
            EndSelect
          EndIf
        Wend
        CloseFile(FF)
      EndIf
      Procedure.s Program()
        ;???
      EndProcedure
      Procedure.s Documents()
        ProcedureReturn XDG_DOCUMENTS_DIR
      EndProcedure
      Procedure.s Desktop()
        ProcedureReturn XDG_DESKTOP_DIR
      EndProcedure
      Procedure.s Downloads()
        ProcedureReturn XDG_DOWNLOAD_DIR
      EndProcedure
      Procedure.s ProgramData()
        ;???
      EndProcedure
      Procedure.s Movies()
        ProcedureReturn XDG_VIDEOS_DIR
      EndProcedure
      Procedure.s Music()
        ProcedureReturn XDG_MUSIC_DIR
      EndProcedure
      Procedure.s Pictures()
        ProcedureReturn XDG_PICTURES_DIR
      EndProcedure
      Procedure.s Public()
        ProcedureReturn XDG_PUBLICSHARE_DIR
      EndProcedure    
  CompilerEndSelect
  Procedure.s Temp()
    ProcedureReturn GetTemporaryDirectory()
  EndProcedure
  Procedure.s Home()
    ProcedureReturn GetHomeDirectory()
  EndProcedure
EndModule

Debug Directory::Program()
Debug Directory::Documents()
Debug Directory::Desktop()
Debug Directory::Downloads()
Debug Directory::ProgramData()
Debug Directory::Movies()
Debug Directory::Music()
Debug Directory::Pictures()
Debug Directory::Public()
Debug Directory::Temp()
Debug Directory::Home()

Debug "----"
Debug "Pictures-Directory:"
path.s=Directory::Pictures()
dir=ExamineDirectory(#PB_Any,path,"*.*")
If dir
  While NextDirectoryEntry(dir)
    Debug "  "+DirectoryEntryName(dir)+" "+DirectoryEntryType(dir)
  Wend
  FinishDirectory(dir)
EndIf

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 04.12.2015 12:57
von GPI
Program-Data wird eigentlich unter Home bei Linux mit einen "." in Ordnernamen abgespeichert. Dementsprechend wäre das dann GetHomeDirectory()+"."
Wohin werden denn bei Linux die Programme hininstalliert? Irgendwo müssen die doch auch landen.

Re: Verschiedene Systempfade für Win&Mac - aber wie für Linu

Verfasst: 04.12.2015 13:26
von NicTheQuick
Na normalerweise installiert man Programme als root, d.h. die installieren sich dann in /usr/bin, /bin, /var/lib, /lib, /usr/share, /opt, usw. Je nachdem, was es für eine Anwendung ist und mit welchem Prefix sie kompiliert wurde und auf welchem Linux du zu Hause bist. Ein Programme-Verzeichnis im Userspace existiert nicht. Ich nutze dafür aber z.B. /home/nicolas/programme. Da ist unter anderem Purebasic drin und ein paar eclipse-Installationen, und noch anderer Kram, mit dem ich nicht meine root-Partition zumüllen will bzw. den man unproblematisch in seinem Home-Verzeichnis lassen kann und der auch in jedem Linux funktioniert, das das selbe Home-Verzeichnis nutzt.