Fotos Importieren - Datenbank

  • Hallo liebe Leut'!

    Ich bräuchte mal ein bisschen Hilfe.

    Ich bin dabei mir ein Programm zu schreiben, dass mir die Bilder von meiner Digitalkamera importiert. Das ganze soll so ablaufen:
    1.)Speicherkarte in PC
    2.)Im Hintergrund laufendes Programm, erkennt das neue Laufwerk und startet den Importer
    3.)Der Importer kopiert die Bilder auf den PC.

    1.) und 2.) hab ich schon nur 3.) macht mir Probleme.

    Denn ich will, dass der Importer die Bilder, die auf meiner Speicherkarte sind mit einer Datenbank vergleicht und nur Bilder importiert, die noch nicht am PC sind.

    Weitere Schwierigkeit ist, dass meine Kamera die Bilder nach dem Schema DSC0xxxx.jpg speichert und ich die Dateinamen auch so lassen will. Dumm, denn so kann ich nur 9999 Bilder speichern, ohne das welche den gleichen Dateinamen haben. Da ich aber schon mehr Bilder habe, bin ich dazu übergegangen, neue Bilder erst in einen Ordner zu kopieren, dann mit einem Programm alle Bilder von DSC0xxxx.jpg nach DSC1xxxx.jpg umzubenennen und dann zu den anderen Bildern zu tun. Das soll jetzt alles der Importer machen.

    So wie ich das sehe, brauche ich irgendeine Datei, wo die Dateinamen der sich auf dem PC befindenden Bilder gespeichert werden.

    Ich denke da an 2 Möglichkeiten

    1.)Liste, die das Erstellungsdatum der PC-Bilder enhält. also z.B. 13.12.2007 12:58:11 und dann mit dem Datum der Speicherkarten-Bilder vergleicht
    Problem: Bei 3 Bilder/sek kann es vorkommen, dass zu einem Datum drei Bilder vorhanden sind.

    2.)Dateienamen der Speicherkarten-Bilder in eine Liste schreiben, dort nach DSC1xxxx.jpg umbenennen und dann mit einer Liste der PC-Bilder vergleichen.

    Ob eine der Methoden richtig ist und wenn ja welche, bin ich mir noch nicht so sicher.


    Also nochmal meine Frage/Problem in Kurzform:

    1.)Ich brauche eine Möglichkeit eine Liste/Datenbank zu erstellen

    2.1.1)Die Liste muss das Datum der Bilder auf dem PC enthalten
    2.1.2)Datum der PC-Bilder mit Datum der Speicherkarten-Bilder vergleichen
    oder
    2.2.1)Die Liste muss die Dateinamen der Bilder auf dem PC enthalten
    2.2.2)Dateinamen der Speicherkarten-Bilder in eine Liste laden und nach DSC1 umbenennen
    2.2.3)Dateiname der PC-Bilder mit Dateinamen der Speicherkarten-Bilder vergleichen

    3.)Der Liste/Datenbank die Daten der frisch importierten Bilder hinzufügen

    An dieser Stelle schon mal Danke fürs lesen.
    Ich hoffe es kann mir jemand helfen. Ich erwarte jetzt natürlich keinen kompletten Lösungsvorschlag.
    Ich bin für alles was mich weiterbringt dankbar. :)

  • Das einfachste wäre, das Datum als Dateinamen zu verwenden.
    Auf jeden Fall bruchst du
    FileGetTime
    und, falls die Zeit beim Kopieren evtl geändert wird FileSetTime

  • Hmm das muss ich mir noch mal überlegen.
    Auf jeden fall brauch ich zuerst mal eine Möglichkeit eine Liste/Datenbank zu erstellen, diese auszulesen und Sachen hinzu zufügen.
    Geht so was mit arrays?! Kann mit hier wer weiterhelfen?

  • Also, hier mal so ein grobes Beispiel:

    Spoiler anzeigen
    [autoit]

    Global Const $KAMERAPFAD = "KAMERAPFAD" ; OHNE Backslash am Ende!
    Global Const $ZIELPFAD = "ZIELPFAD" ; OHNE Backslash am Ende!
    DirRemove($ZIELPFAD & "\TempAutoitCopy",1)

    [/autoit] [autoit][/autoit] [autoit]

    $files = _FileListToArray($KAMERAPFAD,"*.jpg",1)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $FileTime[UBound($files)]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $files
    $FileTime[$i] = FileGetTime($KAMERAPFAD & "\" & $files[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    FileMove($KAMERAPFAD&"\*.jpg",$ZIELPFAD & "\TempAutoitCopy",9)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $files
    $tempNr = ""
    $tempPath = $ZIELPFAD & "\" & StringLeft($files[$i],3) & $tempNr & StringTrimLeft($files[$i],3)
    While FileExists( $tempPath )
    If $FileTime[$i] == FileGetTime($tempPath) Then ContinueLoop 2 ; Wenn das Bild schon im Zielordner ist, dann nächstes Bild bearbeiten.
    $tempNr += 1
    $tempPath = $ZIELPFAD & "\" & StringLeft($files[$i],3) & $tempNr & StringTrimLeft($files[$i],3)
    WEnd
    FileMove($ZIELPFAD & "\TempAutoitCopy" & "\" & $files[$i],$tempPath,8)
    FileSetTime($tempPath,$FileTime[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    DirRemove($ZIELPFAD & "\TempAutoitCopy",1) ; Am Ende Alle nicht kopierten Dateien löschen.

    [/autoit]
  • also ich wär ja für ne imba sqlite datenbank xD

    also die Bilder bekommen einfach stur ne id und werden in einen Ordner verfrachtet 8)

    dann setzt du ne schöne SQLDatenbank auf, die die id enthält und sonst noch alles was du willst..(erstellungsdatum,kopierdatum,beschreibung,name,alter geschelcht xD) und verdisch :D

    find ich besser, als mit irgendwelchen files herumzuwerkeln... aber ohne sqlkenntnisse relativ schwer ^^

    naja...deine entscheidung

  • So hat ein bisschen gedauert, bis ich Zeit gefunden habe, das Beispiel anzuschauen und zu verstehen. Ich werds zwar nicht in dieser Art verwenden, aber danke für die Inspiration. Hab ein bisschen rumprobiert und ich glaube, dass es funktioniert, was ich mir vorgestellt habe.