Zum Inhalt springen

Erstelldatum als Dateiname


Sharpy

Empfohlene Beiträge

Hallo Leute :-)

Ich habe ein Problem der Code funktionert soweit sogut. aber ich möchte das file nicht manuell umbenennen sondern, dass automatisch das Erstellungdatum von der Datei angehängt wir als dateiname (JahrDatumZeit_alterfilename.datentyp) .

kann mir bitte jemand helfen, weil ich brauch das Programm echt dringent.

Bsp: bla.jpg -> 200611011703_bla.jpg



#include <stdio.h>

#include <stdlib.h>

#include <dirent.h>

#include <string.h>

#include <windows.h> 

#include <time.h> 

#include <iostream.h> 

#define MAX 20



char *my_itoa(int wert, int laenge) {

   char *ret =(char *) malloc(laenge+1 * sizeof(char));

   int i;


   for(i  =0; i < laenge; i++) {

      ret[laenge-i-1] = (wert % 10) + 48;

      wert = wert / 10;

   }

   ret[laenge]='\0';

   return ret;

}


int main(int argc, char *argv[])

{

    DIR         *dip;

    struct dirent  *dit;


    int i = 0, pos = 0, len,x=1;

    char path[MAX]/* = "/alanya"*/, c, prefix[MAX], end[MAX], neu[MAX];

    printf("\n      ----- rename 0.2 -----");

    printf("\n\n / -> root der aktuellen Partition\nauf der die Datei ausgefuehrt wird.\n\n");

    printf("Verzeichnis:\n> ");

    fflush(stdin);

    gets(path);


    // Bösse 

    // SYSTEMTIME systime;

    // FILETIME   ftime; 


    // GetSystemTime(&systime);

    // SystemTimeToFileTime(&systime,&ftime);


  //  *(ULONGLONG*)&ftime+=24*60*40*1000000*10;


  //  FileTimeToSystemTime(&ftime,&systime);

   // SetSystemTime(&systime);


    printf("Prefix:\n> ");

    fflush(stdin);

    gets(prefix);

    printf("Dateiendung:\n> ");

    fflush(stdin);

    gets(end);



    if((dip = opendir(path)) == NULL)

    {

        printf("fehler beim oeffnen des verzeichnisses\n\n");

        return 0;

    }


    else

    {

        while((dit = readdir(dip)) != NULL)

        {

            if(strcmp(dit->d_name, ".") != 0 && strcmp(dit->d_name, "..") != 0)

            {


                     strcpy(neu,prefix);

                     strcat(neu, my_itoa(x,5));

                     strcat(neu, end);

                     printf("%s\n",neu);

                     x++;


                printf("%s\n", dit->d_name);

                rename(dit->d_name,neu);

            }

        }

    }



    if(closedir(dip) == -1)

    {

        printf("fehler beim schliessen des verzeichnisses\n\n");

        return 0;

    }


    printf("\n\n");

    system("PAUSE");

    return 0;

}

  

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hat jetzt nicht direkt mit deiner Frage zu tun, aber du hast da ein Speicherleck. Der Speicher, den du in my_itoa mit malloc anforderst, gibst du nirgendwo wieder frei.

Und warum stellst du den neuen Dateinamen nicht einfach auf einen Rutsch mit einer sprintf-Anweisung zusammen?

Bist du da eigentlich unter Windows oder unter Unix/Linux zu Gange?

P.S.:

- gets ist böse, weil du keine Möglichkeit hast, einen Pufferüberlauf zu verhindern.

- fflush(stdin) bewirkt undefiniertes Verhalten.

- system("PAUSE") ist suboptimal.

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke erstmal für die vielen hinweise :)

ich arbeite unter windows xp und benutze bloodsheld dev c++.

mm wiess aber nicht genau wie einbauen. so dass die dateien im Ordner alle nach ihrem erstellungsdatum umbennent werden, kurz mom kann ich einfach einen neuen namen geben und der alte wird mit _angebunden.

Wenn jemand eine solches Porgramm mit ansi c oder c++ hätte wäre ich auch glücklich zahle auch gerne 45.- euro per paypal oder so, da ich dies echt dringent brauche. (mit quelldatei usw. für eventuelle zusätze , CLI)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Steht auch irgendwo in der MSDN bzw. Knowledge Base.

Der C Standard ist ja nur der kleinste gemeinsame Nenner an den sich alle halten müssen (sollten). Das heißt ja nicht das wenn da etwas offen (undefiniert) bleibt es nicht je nach Kompiler oder Betriebssystem verschiedene Wirkungsweisen geben kann. Das heißt es ja leider nichtmal bei im Standard fest definierten Dingen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn jemand eine solches Porgramm mit ansi c oder c++ hätte wäre ich auch glücklich

In Standard-C bzw. -C++ wird das nicht machbar sein, weil beide weder Verzeichnisse durchsuchen noch das Erstellungsdatum einer Datei ermitteln können.

Ein halbwegs portables C++-Programm könntest du mit boost::filesystem hinbekommen.

Ansonsten wirst du dich wohl entweder auf POSIX oder WinAPI festlegen müssen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Umwandeln von FILETIME in SYSTEMTIME (FileTimeToSystemTime)

- In String formatieren (sprintf)

bei den zwei wenn du den code anschust kannst du alle files rauslesen und umbennennen aber umbennennen geht nur mit einer manuellen name vergabe.

das soll soll autoamtisch erstelldatum als namen schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hej danke vielmals für die hilfe bis hierher, war leider 4 tage krank musste grippe auskurrieren.

habe diesen code in eine neuem Projekt versucht dort geht es einwandfrei aber bei mir im code funkt es ned kanst du es ev mal in den code schreiben wäre dir dankbar, ev mache ich was falsch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

das kommt als ausgabe

#warning This file includes at least one deprecated or antiquated header. \

Please consider using one of the 32 headers found in section 17.4.1.2 of the \

C++ standard. Examples include substituting the <X> header for the <X.h> \

header for C++ includes, or <iostream> instead of the deprecated header \

<iostream.h>. To disable this warning use -Wno-deprecated.

Coppermine Photo Gallery - neues Album/untitled

Link zu diesem Kommentar
Auf anderen Seiten teilen

also der compiler startet das programm nicht. von dem her gehe ich aus das ein fehler ist.

    printf("\n      ----- rename 0.2 -----");

    printf("\n\n / -> root der aktuellen Partition\nauf der die Datei ausgefuehrt wird.\n\n");

    printf("Verzeichnis:\n> ");

    fflush(stdin);

    gets(path);



    SYSTEMTIME st;

    FileTimeToSystemTime( &wfd.ftCreationTime, &st );

    sprintf( neu, "%04d%02d%02d%02d%02d_%s", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, wfd.cFileName );

    // Bösse ----- test zweck

    // SYSTEMTIME systime;

    // FILETIME   ftime; 


    // GetSystemTime(&systime);

    // SystemTimeToFileTime(&systime,&ftime);


  //  *(ULONGLONG*)&ftime+=24*60*40*1000000*10;


  // FileTimeToSystemTime(&ftime,&systime);

   // SetSystemTime(&systime);

    //---------------------------



    //printf("Prefix:\n> ");

     //fflush(stdin);

    //gets(prefix); wird ersetz durch   

    //SYSTEMTIME st;

    //FileTimeToSystemTime( &wfd.ftCreationTime, &st );

    //sprintf( neu, "%04d%02d%02d%02d%02d_%s", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, wfd.cFileName );



    printf("Dateiendung:\n> ");

    fflush(stdin);

    gets(end);



    if((dip = opendir(path)) == NULL)

    {

        printf("fehler beim oeffnen des verzeichnisses\n\n");

        return 0;

    }


    else

    {

        while((dit = readdir(dip)) != NULL)

        {

            if(strcmp(dit->d_name, ".") != 0 && strcmp(dit->d_name, "..") != 0)

Link zu diesem Kommentar
Auf anderen Seiten teilen

also der compiler startet das programm nicht. von dem her gehe ich aus das ein fehler ist.
Es ist gar nicht Aufgabe des Compilers, das Programm zu starten. Er soll es nur übersetzen. Das entscheidende ist übrigens nicht die Warnung, die du hier gepostet hast, sondern die Fehler danach, die leider nur im Screenshot zu sehen sind.

Warum verwendest du eigentlich immer noch opendir/readdir? Ich dachte, du wolltest die WinAPI benutzen? Mein Code geht davon aus, dass du FindFirstFile/FindNextFile benutzt.

Du kannst meinen Code nicht einfach irgendwo in deinen reinklatschen. Ein wenig Mitdenken wäre schon angebracht. Ich schrieb doch:


// wfd ist deine WIN32_FIND_DATA-Struktur
[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...