Seite 1 von 1

Allgemeine Dateiorganisation ("best practice")

Verfasst: Freitag 21. Januar 2011, 19:14
von 5in4
Hallo,

ich frage mich immer wieder, wie ich die Daten, die meine Programme brauchen am besten sortiere, bzw. wo ich sie ablegen lasse. Im Beispiel hier geht es um Sqlite-Datenbanken. Auf die muss der Nutzer ja stets Schreibzugriff haben.
Um plattformunabhängig zu sein erstelle ich bei Programmen mit grafischer Oberfläche mit PyQt eine Settings-Datei im Ini-Format. Somit wird diese Settings-Datei auch unter Windows als Datei abgelegt und nicht in die Registry geschrieben, wie es standardmäßig der Fall ist. Diese Datei liegt unter Linux normal in ~/.config/ProgrammName (und unter Windows eben in einem entsprechenden Verzeichnis). Den Ordner, in dem die Settings-Datei liegt lese ich aus und lege die Datenbank dort hinein. Im Code sieht das etwa so aus:

Code: Alles auswählen

        # Load settings
        QSettings.setDefaultFormat(QSettings.IniFormat)
        self.settings = QSettings()
        self.configpath = os.path.split(self.settings.fileName())[0]

        # Prepare database
        self.db_filename = self.configpath + os.sep + "Database.db"
        self.db = QSqlDatabase.addDatabase("QSQLITE")
Ist das grundsätzlich vernünftig oder gibt es eine bessere Alternative?
Gibt es grundsätzlich einen Ordner, in dem man Nutzerdaten die keine Konfigurationsdateien sind ablegen sollte?

Schöne Grüße

Re: Allgemeine Dateiorganisation ("best practice")

Verfasst: Freitag 21. Januar 2011, 19:30
von Hyperion
Unter Windows gibt es doch diesen Application Data Ordner.

Kurze Anmerkung zum Code:

Code: Alles auswählen

self.db_filename = self.configpath + os.sep + "Database.db"
besser:

Code: Alles auswählen

self.db_filename = os.path.join(self.configpath, "Database.db")

Re: Allgemeine Dateiorganisation ("best practice")

Verfasst: Freitag 21. Januar 2011, 22:45
von ichisich
Für mich stellt sich da die Frage was in der DB für Daten abgelegt sind.

Was in Application Data rein kommt sind ja eher globale Konfigurationen deines Programms.
Also eher user- und systemabhängige Einstellungen (Anordnung von Fenstern in deinem MainWindow, Größe, Position usw)

Soll dein Programm aber beispielsweise ein Projekt verwalten das auch auf einem anderen System benutzt werden kann bzw. soll,
dann müssen die spezifischen Daten an das Projekt gebunden werden und irgendwie zusammengehalten werden sonst muss der User ja anfangen an zehn Stellen seine Sachen zusammen zu suchen.
Beispiel Eclipse-Projekte( was anderes fällt mir gerade nicht ein ...)
C:\User\name\workspace\projekt_bsp --> cp nach --> /home/name/workspace/
Eclipse Starten, Importieren und Projekt läuft mit den Einstellunge wie davor (glaub ich zumindest, schon lange nicht mehr gemacht)

Application Data ist für "nicht Konfigurationsdateien" sehr ungeeignet da es sich standardmäßg um ein verstecktes Verzeichnis handelt.
Dafür gibts "Eigen Datei", "Eigene Bilder" usw, was Windows betrifft.
Bei Linux würde ich sagen /home/user_verzeichnis/unterverzeichnis_meines_programms
oder einfach den User wählen lassen das ist am freundlichsten.

Gruß

Re: Allgemeine Dateiorganisation ("best practice")

Verfasst: Samstag 22. Januar 2011, 10:50
von 5in4
Hallo,

das mit den Workspaces hört sich vernünftig an, zumindest in meinem Anwendungsfall. Danke für den Tipp!
Was ich nicht so gut finde, ist ~/ mit Dateien zu füllen. Immer wenn das ein Programm ungefragt macht, möchte ich es am liebsten gleich wieder von der Platte verbannen.

@Hyperion: Danke für den Hinweis

Schöne Grüße

Re: Allgemeine Dateiorganisation ("best practice")

Verfasst: Samstag 22. Januar 2011, 10:56
von ichisich
Na dann Frag halt :lol:
Das ist meines Erachtens eh die sauberste Lösung wie Du ja auch durch dein Aussage bestätigst.
Grade bei portablen Geschichten packt man das Ganze gerne auf einen portablen Datenträger wie USB-Stick etc.

Gruß

Re: Allgemeine Dateiorganisation ("best practice")

Verfasst: Samstag 22. Januar 2011, 15:52
von 5in4
Ja, besonders hinsichtlich der Portabilität ist das natürlich noch ein besonderer Pluspunkt. Und der Nutzer kann den Workspace irgendwo hinpacken wo er nicht stört, jeder ist zufrieden :)

Dankeschön!