Folder in DB sichern

Ich möchte einen Ordner komplett in der Datenbank sichern. Mit einer Datei habe ich das so gemacht, das geht prima mit jeder Art von Dateien.
Aber wie mach eich das mit einem ganzen Ordner?

    bin = BinaryStream.Open(f)
    if bin <> nil then
      imageData = bin.Read(bin.Length)
      bin.Close
    end if

  rec = new databaserecord
  rec.BlobColumn("picture") = EncodeBase64(imageData)

Ich hinterfrage mal nicht warum Du tust was Du tust…

  1. Wenn du einen Ordner mit Inhalten und Unterordner in deiner Datenbank sichern möchtest, musst du die gesamte Struktur abbilden. Also Ordner 1 hat die Dateien mit der ID xyz . Unterordner 2 hat die Dateien usw…
    Als nächstes kannst du deinen Dateien einzeln sichern. Die Ordner selbst brauchst du nicht zu sicher.

oder

  1. Mach ein ZIP deines Ordners und sicher diesen.

  2. Überdenke ob du wirklich Dateien in einer Datenbank sichern musst. Evtl. reichen Verweise auf einen Speicherort und Name der Datei.

Ein zip wird die beste Lösung sein, denke ich.

Ich möchte in einem Ordner alle Daten eines Projektes sammeln und dann dem Projekt zuordnen. Sicher könnte ich den verweis speichern, aber so ist würden diese Daten nie mehr verloren gehen…

Es ist in der Regel nicht von Vorteil Dateien in einer Datenbank zu speichern. Dein Dateisystem (NTFS/FAT/HFS) ist genau dafür gemacht. Ich nehme mal an dass Du eine relationale Datenbank wie mySQL oder SQLite benutzt. Diese sind zum manipulieren oder abfragen von Daten – nicht Dateien – gedacht. Hier kannst Du wichtige Zusatzinformationen zu deinen Dateien verwalten oder nach diesen suchen.

Kopiere die Dateien die Du verwalten möchtest in einen extra Ordner. Deine Datenbankdatei und deine Dateien können ja im selben Hauptverzeichnis mit deinem Programm liegen.

Bedenke auch dass das speichern der Dateien als String in deiner Datenbank den Zugriff auf selbige extrem verlangsamt. Sollte deine Datenbankdatei einmal einen Fehler aufweisen, kann es passieren dass alle Daten (auch deine Dateien) nicht mehr lesbar sind. Ein solcher Fehler kann im Datenbanktreiber, deiner Software oder auch bei deiner Festplatte auftreten. Deine Strategie nutzt eigentlich gar nichts, ausser das Du eine einzige große Datei hast.

Ich verstehe deine Bedenken! Du kommst aber nicht umher zB in einer Artikeldatenbank auch ein Artikelbild zu sichern, das mache ich seit Jahren ohne Probleme. Natürlich rechne ich es vorher auf ein vernünftiges Maß runter und es liegt in einer extra table.

Ich habe Anwender, die den Mac nur benutzen… die schieben einmal ihre Verzeichnisse hin und her und schon ist er aus der Traum vom Verweis und ich habe ewige Support-Diskussionen…

Früher hatte ich einfach einen Ordner unter Programme, indem alles drin war, heute geht das nicht mehr wegen AppStore und Sandboxed… tja :wink:

Heute: Specialfolder.Applicationdata.child(YourCompany).child(YourApp_Name).child(…

klar, leider findet ein Anwender diesen Ordner nur sehr schwer, wenn es dort etwas reorganisieren möchte…

In Specialfolder.Documents kann der Anwender machen, was er will. :slight_smile:
Freilich sollte die Anwendung darum bitten, in “Dokumente” einen Anwendungsordner anzulegen.