Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Dateien nach Erstellungsdatum umbenennen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.07.2006, 20:02 Uhr
Moz-Tec



Hallo Leute,

ich habe mir ein Programm erstellt, dass Dateien automatissch umbenennt in einen gewünschen neuen Namen. Es wird bei dem Dateinamen dann eine fortlaufende Nummer mit in den Dateinamen eingebracht.

z.B.
AlterName1.jpg --> NeuerName1.jpg
AlterName10.jpg --> NeuerName10.jpg
AlterName11.jpg --> NeuerName11.jpg
.
.
AlterName2.jpg --> NeuerName2.jpg
AlterName20.jpg --> NeuerName20.jpg
AlterName21.jpg --> NeuerName21.jpg

Da ich nicht weiß wie die Eigenschaft heißt, bei der man an der "FileListBox" nicht Alfanummerisch sondern Nummerisch Dateien anzeigen läßt, ist mir auch noch die Idee gekommen die Dateien nach dem Erstellungsdatum der Reihe nach umzubenennen.
Wäre sogar besser da ich meine Foto´s nach Ersatellungsdatum sortieren will und jedes Bild eine eigene Zahl (Index) vergeben will.

z.B.
ErsteErstellteDatei.jpg --> Bild_1.jpg
ZweiteErstellteDatei.jpg --> Bild_2.jpg
...

Falls Ihr aber auch wissen solltet, wie ich die Reihen in der "FileListBox" ändere wäre schon mal eine Teillösung, besser ist die mit dem Datum.

Gibt es eine Funktion mit der ich das Datum von einer Datei feststellen kann. Damit ich diese umbennen und von dieser ältesten Datei aus zur nächts ältesten Datei springen kann um diese dann umzubenennen. Wie z.B. Find , First, Next ! ???

Bitte um eure Hilfe ich denke der ein oder andere wieß das vieleicht.

Danke für eure Hilfe

Reiner
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.07.2006, 01:48 Uhr
Hans
Library Walker
(Operator)


Hi,

mit FileListBox usw. kenn ich mich nicht aus, weil VCL. Das Datum einer Datei kannst Du aber auch ohne VCL-Funktionen feststellen, z.B. mit getftime(). Die Onlinehilfe von Borland bietet dazu folgendes Beispiel:

Zitat von Borland onlinhilfe:


C++:
#include <stdio.h>
#include <io.h>

int main(void)
{
   FILE *stream;
   struct ftime ft;

   if ((stream = fopen("TEST.$$$",
        "wt")) == NULL)
   {
      fprintf(stderr, "Cannot open output file.\n");
      return 1;
   }
   getftime(fileno(stream), &ft);
   printf("File time: %u:%u:%u\n",
          ft.ft_hour, ft.ft_min,
          ft.ft_tsec * 2);
   printf("File date: %u/%u/%u\n",
          ft.ft_month, ft.ft_day,
          ft.ft_year+1980);

   fclose(stream);
   return 0;
}





Dazu gibt es dann noch setftime, womit sich Zeit und Datum einer Datei auch verändern lassen. Das sortieren nach dem Datum könnte noch ein Problem werden, aber darum geht es ja gerade nicht...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.07.2006, 20:19 Uhr
Moz-Tec



Hallo Hans,

erst mal Danke für Deine Hilfe.
Ich werde das mal noch testen, aber wenn ich die Zeit und das Datum dann ermittelt habe, habe ich eigentlich schon mit dem Gedanken gespielt, die Dateien dann nach alter oder Erstellungsdatum (Zeit) zu sortieren. Wenn hier zu jemand noch einen Tipp hat wäre das echt super, dann hätte ich genau das was ich zum fertigstellen des Programmes noch brauche.

Im voraus mal Danke für eure Hilfe.

Reiner
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.08.2006, 15:34 Uhr
Moz-Tec



Hallo Leute,

hab da noch ne ganz einfache Lösung zum ermitteln des Datum und der Urhzeit wann eine Datei erstellt worden ist.

[/cpp]
// Alter der Datei feststellen und in Speicher schreiben
int Datum;
Datum = FileAge(FileListBox1->FileName);

// Dateiname und Datum in Listbox eintragen
ListBox1->Items->Add(FileDateToDateTime(Datum);

C++:

So und jetzt kommt´s, wie sortiere ich die Dateien nach Alter, dass die Aktuellste Datei die letzte ist. Einen Ansatz habe ich schon mal aber wer kann mir weiter helfen?




C++:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Puffer zum ermitteln des Alter der Dateien.
int Buffer[500];
int Datum;

// Speicher vorbereiten für max. 500 Dateien.
for ( int i = 0 ; i < 500 ; i++)
  {
  // Speicher löschen.
  Buffer[i] = NULL;
  }
// Index auf erste Datei setzen.
FileListBox1->ItemIndex = 0;

// Alter der Datei feststellen und in den Speicher schreiben.
for (int Index = FileListBox1->ItemIndex ; Index < FileListBox1->Items->Count ; Index++ )
  {
  // Erstellungsdatum und Zeit in Intger-Wert ermitteln.
  // Dieser Wert kann dann verglichen in sortiert werden.
  Datum = FileAge(FileListBox1->FileName);

  // In Puffer schreiben zum weiteren verarbeiten
  Buffer [Index] = Datum;

     /*
     Ich denke hier sollte dann noch was passieren!!!
     Wer kann mir hier helfen???
     Hier sollten dann die Dateien
     nach Alter sortiert werden. Mit der Hilfe und der
     Sortierfunkruion "qsort" tue ich mir schwer. Wer kanns mir erklären?
     Ein Ansatz wäre echt super
     */


  // Dateiname und Datum in Listbox dem Alter entsprechend der Reihe nach eintragen.
  ListBox1->Items->Add(FileListBox1->FileName + "  " +  FileDateToDateTime(Datum));
  FileListBox1->ItemIndex++;
  }
}



Ich hoffe es ist jemand so nett und kann helfen. Mit Zeigern hab ioch da meine Probleme.

Danke im voraus für eure Hilfe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.08.2006, 12:20 Uhr
Moz-Tec



Hallo Leute,

schade dass niemand eine Antwort auf dieses Problem weiß. Habe aber selbst daran gebrühtet und die (eine mögliche) Lösung gefunden.

Schritt 1:
Ermitteln des Erstellungsdatum und Uhrzeit wie oben schon beschrieben.


Schritt 2:
Name der Datei umbenennen in Datum und Urzeit. Wichtig auf das Format des Datum und der Uhrzeit achten! Falsch: z.B 09.08.2006 20:15:59 Richtig: z.B. 09-08-2006 20-15-59

Diese Teile habe ich im Hilfe System gefunden und weiter ausgebaut.

C++:

  // Datum formatieren
  DateOrder = doDDMMYY;
  DateSeparator = '-';
  DateFullYear = true;
  DateLeadZero = true;
  
// Uhrzeit formatieren
  LongDateFormat;
  TimeSeparator = '-';

  // Datum und Zeit Ermitteln
  int ZeiDatum;
  ZeitDatum = FileAge(FileListBox1->FileName);

  AnsiString Neu = FileDateToDateTime(ZeitDatum) + '.jpg' );
  AnsiString Alt = FileListBox1->FileName;

   /* Umbenennen der Datei */
    if (FileExists(Alt)
      {
      RenameFile(Alt,Neu);
      }
    else
      {
       z.B. Ausgabe eine MessageBox das ein Fehler beim Umbenennen aufgetreten ist!
      }





Schritt 3:
Hier wird nun das gemacht was ich eigentlich möchte !!! Und zwar autumatisch von der FileListBox!
FileListBox updaten, damit die Reihenfolge der Anzeige der FileListBox das Datum und Uhrzeit neu auf listet und damit die Erstellungsreihenfolge der Dateien von Index 0 bis Index n richtig gegeben ist.


Schritt 4:
Nun den Endgültigen Name der Datei über ein Edit Feld und eine lokale Zählervariable bestimmen und nochmal die Datei umbenennen.


Schritt 5:
FileListBox noch mal updaten, fertig.

Natürlich ist das nicht die komplette fertige Lösung, man muss immer noch herausfinden wieviele Dateien vorhanden sind und die Zählervariable einbauen. Das Umbenennen ist mit einer Forschleife dann nur noch Formsache. Also viel Spaß mit dieser Lösung.

Man sieht es geht sehr viel wenn man nur einen kleinen Ansatz hat. Danke noch mal an Hans.

Gruß Reiner

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.10.2006, 12:44 Uhr
Moz-Tec



Gut hab´s jetzt auch bemerkt, dass dies nicht die richtige Lösung ist. das Problem ist immer noch das Sortieren nach Datum. Da der Explorer bzw. die FileListBox den Dateinamen Alfanummerisch und nicht nummerisch anzeigt. So ist das Problem das Daten wie z.B. 21.08.2006 22.08.2006 und 21.09.2006 so nach einander sortiert werden.

Reihenfolge 1
21-08-2006.jpg
21-09-2006.jpg
22-08-2006.jpg

Gewünschtes Anzeige Format wäre

Reíhenfolge 2
21-08-2006.jpg
21-09-2006.jpg
22-09-2006.jpg

Wie erreiche ich, dass in der FilelistBox die Reihenfolge 2 nach Erstellungsdatum angezeigt wird? Kann mir bitte dabei da jemand helfen? Hat jemand eine Idee wie ich das sonst noch hin bekommen? Die Idee mit der qsort() Funktion funktioniert nicht wie ich das gerne hätte, obwohl ich das Datum in eine Integerzahl wandle.

Also Leute lasst mich nicht hängen, trotz meinem frühzeitigem großen Mundwerk und frühzeitiger Euforie.

Danke im voraus Reiner
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: