Announcement

Collapse
No announcement yet.

Datei durchlaufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei durchlaufen

    Hallo zusammen,

    ich will ein kleines Delphi Programm für folgenden Zweck erstellen:

    Und zwar habe ich über einen längeren Zeitraum mit einer Kamera jede Minute ein Bild gemacht, welche ich in:
    C:\Bilder
    abgespeichert habe.
    Die Dateien liegen im folgenden Format vor:
    "Bild_14.12.2009_06:00", "Bild_14.12.2009_06:01", ..., "Bild_14.12.2009_23:59" usw.

    Jetzt will ich in diesem Ordner alle Bilddateien durchlaufen, nach folgendem Muster
    Alle Dateien zwischen 07:00h und 17:00h (nachts interessiert nicht) und davon jedes 10. Bild (also nur alle 10 Minuten) sollen in einen temporären Ordern gespeichert/kopiert werden: "C:\Bilder_temp"

    Kann mir dort jmd. Hilfestellung geben, wie ich mit Windows-Datei umgehe?

    Vielen Dank

  • #2
    Ein TDateTime mit dem Startwert versehen.
    Die im Dateinamen gewählte Formatierung erzeugen.
    Aus dem TDateTime Objekt ein String ereugen und diesen an "Bild_" anhängen.
    Datei kopieren
    10 Min auf das TDateTime Object addieren
    nächste Runde
    Christian

    Comment


    • #3
      Hallo Christian,

      gute Idee - danke!

      ich würde dann so anfangen:

      Code:
      var
        datetime : TDateTime;
        strCompare : String;
        BildZeiger : integer;
        sPfad : String
      begin
        sPfad := 'C:\Bilder';
        BildZeiger := 1;
        datetime := StrToDateTime('14.12.2009 06:00');
        strCompare := 'Bild_' + DateToStr(datetime) + '_' + TimeToStr(datetime);
      
       if BILD IN DATEI VON BILD 1 = strCompare then do
       begin
         // DATEI RÜBERKOPIEREN
         CopyFile( PChar(sPfad) ,'C:\Bilder_temp',false); // ???
         BildZeiger := BildZeiger + 1;
         // HIER MÜSSTE NOCH EIN FEHLER SEIN, ZU DATETIME - 10 MINUTEN ADDIEREN
         DateTimeToStr(StrToDateTime('datetimeD') + StrToDateTime('00:10')); 
       end else
       begin
         BildZeiger := BildZeiger + 1;
       end;
      
      end;

      Bei den groß geschrieben Sachen habe ich jetzt noch Probleme:
      wie vergleiche ich JPEG mit String?
      wie weise ich den Pfad zu, also wie sage ich, welchen Ordner Delphi durchlaufen soll?
      der Kopiervorgang hat mit Sicherheit auch noch einige Haken
      10 Minuten addieren zu einem DateTime



      Vielen Dank für dein/euer Bemühen!

      Comment


      • #4
        Ich verstehe nicht, wozu

        BILD IN DATEI VON BILD
        oder
        wie vergleiche ich JPEG mit String?

        stattfinden muss

        wie weise ich den Pfad zu, also wie sage ich, welchen Ordner Delphi durchlaufen soll?
        Das sollte der Ordner sein, in dem die Bilder liegen
        Christian

        Comment


        • #5
          ja, richtig
          aber wie vergleiche ich Codemäßig alle dateien (jpegs) in einem Ordner mit dem String (strCompare)? wie kann ich diese mit einer schleife durchlaufen?

          und wie kopiere ich diese dann in einen anderen Ordner?

          Comment


          • #6
            Sorry ich verstehe nicht, was du vergleichen willst.

            a) ist ein strCompare unnötig für einen Stringvergleich, da die Klasse AnsiString den Operator == kennt

            b) erstellst du ein String welcher aus dem Datum besteht also "14.12.2009_06:01". Dieser wird mit einem String der den festen Teil des Dateinames enthält "Bild_" zusammengefügt.

            Daraus ergibt sich "Bild_14.12.2009_06:01" Daran wird noch ",jpg" gehangen.

            Dieser wird mit dem Dateipfad "C:\Bilder" zusammen gefügt und ergibt dann den Pfad

            "C:\Bilder\Bild_14.12.2009_06:01.jpg"

            Was soll jetzt oder mittendrin verglichen werden?

            Wenn du jede Minute ein Bild gemacht hast, MUSS diese Datei vorhanden sein.

            Wenn nicht, schlägt der Copy fehl.

            Willst du noch prüfen, of diese Datei tatsächlich im Dateisystem vorhanden ist, musst du erst alle Dateien einlesen. Das geht mit FindFile ->WIN 32 API. Erscheint aber aus o.a. Gründen unnötig.

            Für die Zukunft wäre es besser die Dateinamen mit dem Datum in einem besseren Format abzulegen

            Statt
            Bild_14.12.2009_06:01.jpg

            besser

            Bild_20091214_0601.jpg

            Dann bräuchstest du jetzt nur jede 10. Datei zu kopieren und nicht so ein Aufwand
            Christian

            Comment


            • #7
              okay, danke für die gute Tipps
              das hilft mir weiter

              nehmen wir mal den Fall an, dass die Dateien in folgendem Format abgespeichert sind:
              Bild_20091214_0601.jpg

              Wie sieht dann die CopyFile Methode aus, um jedes 10. Bild rüberzukopieren?
              bzw. wie binde ich diese in die Schleife ein, und wo hört diese dann auf?

              du merkst, ich verstehe das durchlaufen der einzelnen Bilder noch nicht wirklich :-)

              Comment


              • #8
                Zunächst mal handelt es sich um ein Durchlaufen von Directorys oder Ordnern im Filesystem

                Siehe FindFile ->WIN 32 API.

                Alle Dateien des Ordners einlesen, in eine TStringList ablegen, alpabetisch sortieren, in einer Scheife von 0 bis <Anzahl der Dateien mit einem Step von 10

                Diese Datei kopieren

                fertig

                http://www.marquardtnet.info/cecke/d...ilesearch.html
                http://www.marquardtnet.info/cecke/q...quicky_58.html
                Christian

                Comment


                • #9
                  okay

                  und wie kopiere ich die Datei in ein anderes Verzeichnis, wenn ich nicht alles durchlaufen will, was nicht nötig ist, wie du hier sagtest
                  "Erscheint aber aus o.a. Gründen unnötig."

                  Dann muss ich ja auch keine Vergleiche machen und keine Schleife durchlaufen und vor allem nicht erst alle Dateien in eine StringList abspeichern - völlig unnötig für dieses Mini-Programm.

                  dann sage ich
                  kopiere File Bild_20091214_0600.jpg, Bild_20091214_0610.jpg, Bild_20091214_0620.jpg
                  usw.

                  wie sieht sowas codetechnisch aus?

                  Comment

                  Working...
                  X