purzelbaum
unsere besten emails
Coder Board Community

 
Boardmenü
Forum
Portal

Registrieren
Suche
Statistik
Mitglieder
Team
Kalender
Sponsoren
Partner

F.A.Q

Lexikon
Amazon Shop
Unterforen Navigation
Hardware
Software
Betriebssysteme
Foren & CMS
EDV Sicherheit
Telekommunikation
Tutorials & FAQ's
Downloads
Boardsuche
Board durchsuchen:

Wer ist Online ?
Zur Zeit im Forum unterwegs:
- 0 Mitglieder
- davon 0 unsichtbar
- 5 Besucher
- 3 Bot(s)
- 8 Benutzer gesamt


Wer ist wo online?
Wer war Online ?
Heute waren 0 Mitglieder im Forum unterwegs.
Linktip's
   Eigene Projekte:
auto-board.info
film-freunde.info
flirt-freunde.info
linkhunter.info
tier-freunde.info
spass-forum.info
buch-freunde.info
mystic-freunde.de
heimwerker-freunde.de

   Befreundete Projekte:
holyhell.de
emsfriends.de

Coder Board Community » Coding » c / c++ » Zwei Verzeichnisse abgleichen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Zwei Verzeichnisse abgleichen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
riote
Bloody Newb


Dabei seit: 11.01.2006
Beiträge: 5

Zwei Verzeichnisse abgleichen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

ich muss ein Programm schreiben, was zwei Verzeichnisse abgleicht.

Ich bin erstmal soweit, dass er das Quell- und Zielverzeichnis abgleicht, unter der Vorraussetzung, dass es gleich geordnet ist.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:

# include <sys/stat.h>
# include <sys/types.h>
# include <unistd.h>
# include <stdio.h>
# include <string.h>
# include <errno.h>
# include <dirent.h>
# include <stdlib.h>
# include <time.h>
# include <string>
# include <iostream>
# include <stdio.h>

using namespace std;

string einlesen (const dirent *dirzeiger) {
 return((*dirzeiger).d_name);
}


int main (int argc, char **argv)
{
    DIR *dirqu;
    DIR *dirzi;
    const dirent *dirzqu;
    const dirent *dirzzi;
    string zidat, qudat, command, command2;
    bool readzi=true;
    struct stat attribut;
    
    dirqu=opendir(argv[1]);
    dirzi=opendir(argv[2]);
    
    while((dirzqu=readdir(dirqu)) != NULL){
    	
    	stat ( dirzqu->d_name, &attribut );
   	//stat(dirzqu->d_name, &attribut);
	qudat=einlesen(dirzqu);
	
    	cout << "Quelle: " << qudat << "\n";
    	if( (dirzzi=readdir(dirzi)) != NULL && readzi){
    		zidat=einlesen(dirzzi);
		//struct stat attzi;
   		//stat((*dirzqu).d_name, &attzi);
    	}
	
	
    	if (qudat != zidat){
		if (S_ISDIR(attribut.st_mode)){
			command2 = "mkdir "+string(argv[2])+"/"+string(qudat);
			system(command2.c_str());
			readzi=false;
			cout << "Ziel: " << qudat << " Verzeichnis wurde erstellt\n";
		} else {	
    		command = "cp "+string(argv[1])+"/"+string(qudat)+" "+string(argv[2]);
    		system(command.c_str());
		readzi=false;
		cout << "Ziel: " << qudat << " wurde kopiert\n";
		}
    	}
    }
    
    closedir(dirqu);
    closedir(dirzi);   
    return 0;
    
}


Jetzt habe ich allerdings das Problem, dass er mir alle Dateien als Verzeichnisse erkennt und somit im Zielordner diese als Verzeichnisse erstellt. (Btw. vorher hatte ich das Problem genau anders herum, dass er alles als Datei erkannt hat, aber kA warum das jetzt so herum ist)

Sieht jmd den Fehler?

Ich bin für jede Hilfe dankbar.

mfg riote
11.01.2006 19:09 riote ist offline E-Mail an riote senden Beiträge von riote suchen Nehmen Sie riote in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von riote am 11.01.2006 um 19:09 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Affilimatch
Zum Anfang der Seite springen

http://www.itratos.de
Ephraim Ephraim ist männlich
Hobby Progger


images/avatars/avatar-58.gif

Dabei seit: 23.03.2004
Beiträge: 826
Herkunft: coder-board.info

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Bei deinem stat aufruf gibts du nicht den kompletten Pfad zu der Datei / dem Folder an und da du dann auch den Rückgabewert von stat überprüfst, bemerkst du nicht des da ein Fehler aufgetreten ist.

guck mal, so kannste des mach:
code:
1:
2:
3:
4:
5:
6:
7:
string s;

        s = argv[1];
        s += "/";
        s += dirzqu->d_name;
        if(stat ( s.c_str() , &attribut ) == -1) cout << "stat error!" << endl;


Ciao Ephraim

__________________
  1. Google
  2. SelfHTML's Quickbar Supertool (für HTML,CSS,Javascript Fragen)
  3. CSS 4 You (für CSS Fragen)
  4. CoderBoard's Search
  5. After that, with no success, post here smile


12.01.2006 09:55 Ephraim ist offline E-Mail an Ephraim senden Beiträge von Ephraim suchen Nehmen Sie Ephraim in Ihre Freundesliste auf AIM-Name von Ephraim: Gibts Nicht mehr YIM-Name von Ephraim: Gibts Nicht mehr
riote
Bloody Newb


Dabei seit: 11.01.2006
Beiträge: 5

Themenstarter Thema begonnen von riote
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dankeschön. klappt perfekt smile

mfg
12.01.2006 11:00 riote ist offline E-Mail an riote senden Beiträge von riote suchen Nehmen Sie riote in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von riote am 12.01.2006 um 11:00 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Google
Zum Anfang der Seite springen

http://www.itratos.de
riote
Bloody Newb


Dabei seit: 11.01.2006
Beiträge: 5

Themenstarter Thema begonnen von riote
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sorry wegen Doppelpost, aber ich konnte den Beitrag nicht mehr editieren.

So, ich habe ein neues Problem. Da ich ja auch die Änderungsdaten vergleiche, bräuchte ich eine Funktion, die mir die Quelldatei kopiert und der Zieldatei dann das Änderungsdatum der Quelldatei gibt. Ich habe schon eine solche Funktion gefunden, allerdings kommt es da manchmal zu einem SPeicherzugriffsfehler. Dieser kommt allerdings nicht, wenn die Funktion ausgeführt wird, sondern wenn eine Datei kopiert wird (mit dieser Funktion) und danach der nächste Unterordner verglichen werden soll.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
void kopier (string Pfad_q1, string Pfad_z1)
{
   FILE *q,*z;
   struct stat attribut;
   char buf[1024], *str1 = NULL, *str2 = NULL;
   int m;
   struct utimbuf zeit;  /*Siehe Funktion utimes()*/

  str1 = new char[Pfad_q1.size()+1]; 
  str2 = new char[Pfad_z1.size()+1]; 
  strncpy(str1, Pfad_q1.c_str(), Pfad_q1.size());
  strncpy(str2, Pfad_z1.c_str(), Pfad_z1.size()); 
   
  if(stat(str1,&attribut) < 0) {
      fprintf(stderr, "Fehler bei stat ...\n");
      
   }
   zeit.actime = attribut.st_atime;
   zeit.modtime= attribut.st_mtime;

   q=fopen(str1,"r");
   z=fopen(str2,"w");
   if(q == NULL || z == NULL) {
      fprintf(stderr,"Fehler bei fopen ...\n");
      
   }
   while( (m=fread(buf, 1, 1024, q)) > 0 )
      fwrite(buf, 1, m, z);

   /* Wichtig!!! Ohne den Stream zu schließen, wird die
    * aktuelle Zeit verwendet, da die Datei erst nach
    * return 0 beendet wird  */
   fclose(q);
   fclose(z);
   /* Jetzt die Zeit von quelle in ziel eintragen */
   if(utime(str2, &zeit) < 0) {
      printf("Fehler bei utime() ...\n");
      
   }
   }


mfg

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von riote: 17.01.2006 17:14.

17.01.2006 17:13 riote ist offline E-Mail an riote senden Beiträge von riote suchen Nehmen Sie riote in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von riote am 17.01.2006 um 17:13 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Avelyn Avelyn ist weiblich
Moderator


images/avatars/avatar-257.jpg

Dabei seit: 23.10.2005
Beiträge: 78
Herkunft: Österreich

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Warum legst du eigendlich neue dynamische Buffer - die du übrigens nicht löscht, quasi memory leak - an wenn es statisch auch ginge? p.s.: Wie wärs mit system() und externe programm aufrufe wie z.b.: cp oder touch?

__________________
"Beware of bugs in the above code; I have only proved it correct, not tried it" - Donald Knuth
17.01.2006 17:53 Avelyn ist offline E-Mail an Avelyn senden Beiträge von Avelyn suchen Nehmen Sie Avelyn in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von Avelyn am 17.01.2006 um 17:53 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Google
Zum Anfang der Seite springen

http://www.itratos.de
riote
Bloody Newb


Dabei seit: 11.01.2006
Beiträge: 5

Themenstarter Thema begonnen von riote
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wäre schön wenn du mir kurz erklären könntest was du mit dynamische Buffer und memory leak meinst. Diese Funktion habe ich nicht selber geschrieben, sondern gefunden.

Wenn ich es mit cp mache, so wird das änderungsdatum der Zieldatei auf die Zeit gesetzt an der die Datei kopiert wird. Das soll aber nicht so sein.

Was nun wiederum touch ist weiß ich erstmal nicht.

mfg
17.01.2006 20:08 riote ist offline E-Mail an riote senden Beiträge von riote suchen Nehmen Sie riote in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von riote am 17.01.2006 um 20:08 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Ephraim Ephraim ist männlich
Hobby Progger


images/avatars/avatar-58.gif

Dabei seit: 23.03.2004
Beiträge: 826
Herkunft: coder-board.info

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also wenn des mit der Zeit dein einzigstes Problem ist, dann man doch nach deinem
system("cp.....");
einfach noch folgendes:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
   struct stat attribut;
   struct utimbuf zeit;  /*Siehe Funktion utimes()*/
   if(stat("PFAD_ZUR_QUELLE",&attribut) < 0) {
      fprintf(stderr, "Fehler bei stat ...\n");
      
   }
   zeit.actime = attribut.st_atime;
   zeit.modtime= attribut.st_mtime;
   /* Jetzt die Zeit von quelle in ziel eintragen */
   if(utime("PFAD_ZUM_ZIEL", &zeit) < 0) {
      printf("Fehler bei utime() ...\n");
   }


Des is genau des was die Funktion auch macht!
Wenn du da keine veränderte Zeit durch den cp haben willst, mach den stat aufruf vor dem cp
und dann des utime nach dem cp.

Ciao Ephraim

__________________
  1. Google
  2. SelfHTML's Quickbar Supertool (für HTML,CSS,Javascript Fragen)
  3. CSS 4 You (für CSS Fragen)
  4. CoderBoard's Search
  5. After that, with no success, post here smile


18.01.2006 08:49 Ephraim ist offline E-Mail an Ephraim senden Beiträge von Ephraim suchen Nehmen Sie Ephraim in Ihre Freundesliste auf AIM-Name von Ephraim: Gibts Nicht mehr YIM-Name von Ephraim: Gibts Nicht mehr
Google
Zum Anfang der Seite springen

http://www.itratos.de
riote
Bloody Newb


Dabei seit: 11.01.2006
Beiträge: 5

Themenstarter Thema begonnen von riote
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

danke für die antwort.

ich habe jetzt einfach bei cp den schalter -p gesetzt, da wird das datum mit kopiert smile

mfg
(aufs nächste Problem Augenzwinkern )
18.01.2006 12:01 riote ist offline E-Mail an riote senden Beiträge von riote suchen Nehmen Sie riote in Ihre Freundesliste auf
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von riote am 18.01.2006 um 12:01 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
Ephraim Ephraim ist männlich
Hobby Progger


images/avatars/avatar-58.gif

Dabei seit: 23.03.2004
Beiträge: 826
Herkunft: coder-board.info

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Na oder so Zunge raus

Warum kompliziert wenns einfach geht Augenzwinkern

Ciao Ephraim

__________________
  1. Google
  2. SelfHTML's Quickbar Supertool (für HTML,CSS,Javascript Fragen)
  3. CSS 4 You (für CSS Fragen)
  4. CoderBoard's Search
  5. After that, with no success, post here smile


18.01.2006 16:48 Ephraim ist offline E-Mail an Ephraim senden Beiträge von Ephraim suchen Nehmen Sie Ephraim in Ihre Freundesliste auf AIM-Name von Ephraim: Gibts Nicht mehr YIM-Name von Ephraim: Gibts Nicht mehr
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Coder Board Community » Coding » c / c++ » Zwei Verzeichnisse abgleichen

Views heute: 1.471 | Views gestern: 7.566 | Views gesamt: 15.689.319



Impressum

Board Blocks: 46.081 | Spy-/Malware: 1.247.911.449.400.000.000.000.000.000 | Bad Bot: 0 | Flooder: 21.847
CT Security System Pre 6.0.1: © 2006-2007 Frank John

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH

Style & Graphics © 2004-2005 by Technomausi