Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verständnisfrage

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
23.04.2007, 21:54 Uhr
newbeee



was passiert in diesen zeilen?

C++:
dirzeiger=readdir(dir);

sprintf(dwd,"%s%s","data/dwddata",(*dirzeiger).d_name);
stat(dwd, &attribut);
filesize=attribut.st_size;
actime=attribut.st_mtime;    
printf("%s\n",dwd);
printf("%d\n,%d\n",actime,filesize);



kann das jemand erkennen? ich würde gern wissen, wie actime und filesize entstehen?????



vielen dank und gruß

Dieser Post wurde am 23.04.2007 um 22:36 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.04.2007, 22:32 Uhr
öni



sieht so aus als würde es ein Objekt/Attribut oder sowas geben das "attribut" heist und schon bestimmte Werte hat bzw die durch eine Methode abgerufen werden! Aber ich würde sagen mehr code könnte das ganze vereinfachen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.04.2007, 23:15 Uhr
newbeee



so, hier erstmal noch etwas quellcode


C++:
    DIR *dir;
     struct dirent *dirzeiger;
     struct stat attribut;
    char dwd[128],zeile[256];
    int i;
    double filesize,actime,oldfilesize,oldactime;
    
    //***Überprüfung auf neue dwd-Datei******
     dir=opendir("data/dwddata");
    // Test

  
    for(i=0;i<2;i++)
    dirzeiger=readdir(dir);
    
    while((dirzeiger=readdir(dir)) != NULL)
    {
      sprintf(dwd,"%s%s","data/dwddata",(*dirzeiger).d_name);
    stat(dwd, &attribut);
       filesize=attribut.st_size;
    actime=attribut.st_atime;    
    printf("%s\n",dwd);
    printf("%d\n,%d\n",actime,filesize);
    }
    
    closedir(dir);
    
    FILE *dwdcheck;
    dwdcheck=fopen("data/dwdcheck.dat","r");
    fgets(zeile,256,dwdcheck);
    oldfilesize=atof(zeile);    
    fgets(zeile,256,dwdcheck);
    oldactime=atof(zeile);
    fclose(dwdcheck);
    printf("%d\n,%d\n",oldactime,oldfilesize);
    if (oldactime!=actime && oldfilesize!=filesize)
    {
        FILE *dwdcheck;
        dwdcheck=fopen("data/dwdcheck.dat","w");
        fprintf(dwdcheck,"%f\n%f\n",filesize,actime);
        fclose(dwdcheck);        
        
        subgribreader(dwd);
    }


eine sache hab ich schon geändert. und zwar actime = attribut.st_atime;
was da vorher stand, war für linux (mtime) und ich brauche für dos(atime).

das programm soll das verzeichnis "data/dwddata" öffnen und die dateiattribute der dort enthaltenen datei "dwd" in actime (letzte änderung der datei) und filesize (größe der datei) schreiben. dann soll er in die datei "dwdcheck.dat" schauen und oltactime und oldfilesize auslesen. wenn diese unterschiedlich zu actime und filesize sind(also "dwd" sich verändert hat), soll er die funktion subgribreader ausführen.

leider macht es das nicht. obwohl der sich die attribute verändert haben.

kann jemand einen fehler erkennen?

vielen dank

newbeee

Dieser Post wurde am 24.04.2007 um 08:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.04.2007, 00:26 Uhr
Blubber2063



Das ist kein Ansi Standard das ist Posix Standard und der Code liest ein Verzeichnis. Genauer gesagt den ersten Eintrag des Verzeichnisses und holt sich dann die Dateiinformationen, dafür wird das struct stat attribut mit den Daten über die Datei gefüllt und dann ausgegeben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.04.2007, 10:09 Uhr
newbeee



.....hallo,


ich kenne mich mit dem programmieren nicht so aus......bin komplett neu auf dem gebiet.

kann man erkennen, warum das unter linux läuft und nicht unter dos?
beim compilieren geht es jedesmal fehlerfrei durch.

danke und gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.04.2007, 10:20 Uhr
Th



Du solltest beim Vergleich das logische Oder verwenden, d.h.

C++:
if (oldactime!=actime || oldfilesize!=filesize)


sonst muß sich bei dir immer beides ändern, aber eigentlich reicht auch nur die Abfrage auf die letzte Änderung (denn bei einer Dateigrößenänderung wird das Datum ja neu gesetzt).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.04.2007, 10:28 Uhr
newbeee



das hab ich schon probiert, weil ich gelesen habe, das unter dos die größe von dateien oft mit null angegeben werden. nach einem test hat sich das bestätigt, also hab ich den teil mit filesize entfernt.

aber ist jetzt erstmal ok. ich versuch gerade, das ganze in matlab neu zu schreiben und hab einfach nicht richtig gerafft, was da passiert. jetzt ist es aber klar.

vielen dank an euch.

gruß newbeee
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.04.2007, 17:01 Uhr
Blubber2063



Also wenn es durchläuft hast du Glück, hab mich mit der Winapi Lösung des ganzen nicht befasst, aber wenn die sich hier an Posix halten wäre das ja mal erstaunlich . Grundsätzlich erkennt man das eigentlich nur wenn man die Funktionsbezeichner der Systeme kennt, allerdings hat Microsoft oft recht komisch lesbare Bezeichner in seiner Api, bei anderen ist es relativ gleich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: