Allgemeine Dateiorganisation ("best practice")

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
5in4
User
Beiträge: 6
Registriert: Montag 20. Dezember 2010, 13:09

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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")
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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ß
5in4
User
Beiträge: 6
Registriert: Montag 20. Dezember 2010, 13:09

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
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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ß
5in4
User
Beiträge: 6
Registriert: Montag 20. Dezember 2010, 13:09

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!
Antworten