Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dateinamen Vergleichen und Verschieben

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 < [ 2 ]
000
09.11.2006, 13:41 Uhr
thorgo



Hi ich suche eine hilfestellung oder einen lösungsansatz ich muss gestehen das ich gerade erst angefangen habe mich mit der Materie C++ auseinander zusetzen.
es stellt sich also folgendes problem. ich muss täglich zwei ordner miteinander abgleichen, die Dateien die im ersten ordner neu dazgekommen sind müsse zunächst in einen dritten odner kopiert werden dieser ordner muss den gleichen namen tragen wie der erste ordner jedoch mit dem anghängten tagesdatum im Dateinamen. anschließent müssen die ungleichen daten noch in den zweiten ordener Kopiert werden damit am Folgetag wieder die Aktuellen Daten in einen Neuen Ordner Geschrieben werden.

mein grundgedanke sah ungefair so aus:

"if (Ordner1\dateien.pdf != Ordner2\dateien.pdf) Kopiere != Daten in Ordner3Datum\dateien.pdf && in Ordner2\dateien.pdf"

das Hauptproblem besteht darin das für die dateinamen keine konstannte verwendet werden könnnen da dies aus ziffen bestehen. zum schluss muss noch ausgegeben werden wieviele dateien in den neuen Ordner geschrieben wurden dateianhänge augenommen. diese datei anhänge unterscheiden sich von den normalen dateien durch ein angeängtes "L" am dateinamen.

Bitte helft mir ich verzweifle
gruß Thorsten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.11.2006, 16:18 Uhr
xXx
Devil


naja ... lstrcmp vergleicht nen string ... du musst schon nen ansatz zeigen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.11.2006, 16:38 Uhr
thorgo



genau das ist im moment noch das problem ich habe zwar eine kurze zusammenfassung des eigentlichen problems, finde jedoch keine Ansätze zur lösung ich hampel mich seit nun zwei Tagen durch Bücher und Foren kann aber noch keine ergebnisse verzeichnen.
mein erster gedanke war die directorys über system("dir datei1name >> Datei1.txt")
in textdateien umzuwandeln und alle eintäge mit der Endung pdf der reihe nach in eine variable zu speichern, genauso wollte ich es mit dem zweiten Ordner durchführen und diese Variablen dann mitenander vergleichen sollte eine variable nicht auf ein gleiches gegenstück treffen wollte ich diese an eine funktion übergeben die diese Datei in einen zu erstellenden Ordner verschliebt. Ich finde aber weder einen hinweis auf zu werwedende #includes noch eine syntax welche ansatzweise mien problem beschreibt.
gruß Thorsten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.11.2006, 20:06 Uhr
mischa
Fragender


also in cpp brauchst du wohl für dieses problem
fstream, sstream und string als includes da ist eigentlich alles drin was du brauchst
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.11.2006, 08:33 Uhr
thorgo



das ist ein anfang, ich schaue mal wie weit ich damit komme.
Danke schon mal
gruß Thorsten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.11.2006, 13:19 Uhr
thorgo



ok den ersten teil habe ich eingelesen und testweise mit cout ausgegeben.
nun habe ich versucht die variable Vergleich in einen zweiten FindFirstFile zu übergeben das verweigert er allerdings aufgrund dessen, das der übergebene parameter ein string ist wenn ich versuche var1.cFileName versuche zu über geben verweigert er das ebenfalls.


#include <iostream>
#include <string>
#include <windows.h>

using namespace std;


int main()
{
string Vergleich;
string Vergleich2;
HANDLE fHandle;
(HANDLE zHandle;
WIN32_FIND_DATA ver1;
WIN32_FIND_DATA ver2;
fHandle=FindFirstFile("c\Test\\ACH\\*.pdf",&ver1);

do
{
Vergleich = ver1.cFileName;
zHandle=FindFirstFile("C\Test\\ACH02112006\\%s",Vergleich.c_str(),&ver2);
Vergleich2 = ver2.cFileName
cout << Vergleich << Vergleich2 << endl;
FindClose(zHandle);
}
while (FindNextFile(fHandle,&ver1));
FindClose(fHandle);
system ("pause");
return 0;
}
kann mir da jemand helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.11.2006, 15:16 Uhr
thorgo



Bin nun doch ein bissi weiter nun macht mir allerdings die if anweisung probleme, sie will nich so wie ich :o(

C++:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <shlwapi.h>
using namespace std;


int main()
{
        string Vergleich;
        string Vergleich2;
        string pfad1;
        string pfad2;
        string pfad3;
        string temp;
        string temp2;
        HANDLE fHandle;
        HANDLE zHandle;
        WIN32_FIND_DATA ver1;  
        WIN32_FIND_DATA ver2;
        fHandle=FindFirstFile("c:\\Test\\ACH\\*.pdf",&ver1);
        
    do
                {
                pfad1 = "c:\\Test\\ACH\\";
                pfad2 = "c:\\Test\\ACH08112006\\";
                pfad3 = "c:\\Test\\";
                Vergleich = ver1.cFileName;    
                Vergleich2 = "c:\\Test\\ACH08112006\\";
                Vergleich2 = Vergleich2+Vergleich;
                if (!(zHandle=FindFirstFile(Vergleich2.c_str(),&ver2)))
                   {
                   temp = pfad1;
                   temp = temp+Vergleich;
                   temp2 = pfad2;
                   temp2 = temp2 + Vergleich;
                   CopyFile(temp.c_str(), temp2.c_str(), TRUE);  
                   FindClose(zHandle);
                   }
                else
                zHandle=FindFirstFile(Vergleich2.c_str(),&ver2);
                Vergleich2 = ver2.cFileName;
                cout << Vergleich << endl << Vergleich2 << endl;
                FindClose(zHandle);
                }
    while (FindNextFile(zHandle,&ver1));
    FindClose(zHandle);
    system ("pause");
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.11.2006, 18:37 Uhr
mischa
Fragender


du hast if (!(zHandle=FindFirstFile(Vergleich2.c_str(),&ver2)))
aber es muss if (!(zHandle==FindFirstFile(Vergleich2.c_str(),&ver2))) heißen
= ist nicht ==
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.11.2006, 08:59 Uhr
thorgo



Danke aber die gesamte anweisung musste ich noch mal überdenken, der erste teil funktionniert jetzt nun muss er nur noch die Anzahl der neuen Dokumente feststellen.
hier ist schon mal der erste Funktionierende teil.

C++:
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <shlwapi.h>
#include <ctime>
using namespace std;


int main()
{
        string Vergleich;
        string Vergleich2;
        string pfad1;
        string pfad2;
        string pfad3;
        string temp;
        string temp2;
        string temp3;
        HANDLE fHandle;
        HANDLE zHandle;
        time_t datum;
        struct tm *tmzgr;
        char Datum[30];

        datum = time(NULL);
        tmzgr = localtime(&datum);
        strftime(Datum,30,"%d""%m""%Y",tmzgr); //anstatt %c kann man auch folgende Formatzeichen eingeben
        WIN32_FIND_DATA ver1;  
        WIN32_FIND_DATA ver2;
        fHandle=FindFirstFile("c:\\Test\\ACH\\*.pdf",&ver1);
        
    do
                {
                pfad1 = "c:\\Test\\ACH\\";
                pfad2 = "c:\\Test\\ACH08112006\\";
                pfad3 = "c:\\Test\\";
                Vergleich = ver1.cFileName;    
                Vergleich2 = "c:\\Test\\ACH08112006\\";
                Vergleich2 = Vergleich2+Vergleich;
                zHandle=FindFirstFile(Vergleich2.c_str(),&ver2);
                Vergleich2 = ver2.cFileName;
                if (Vergleich != Vergleich2)  
                   {
                  
                   temp = pfad1;
                   temp = temp+Vergleich;
                   temp2 = pfad2;
                   temp2 = temp2 + Vergleich;
                   temp3 = pfad3 + "ACH" + (string) Datum;
                   bool bResult  = ::CreateDirectory(temp3.c_str(),NULL);
                   CopyFile(temp.c_str(), temp2.c_str(), TRUE);                    
                   temp2 = temp3 + "\\";
                   temp2 = temp2 + Vergleich;
                   CopyFile(temp.c_str(), temp2.c_str(), TRUE);
                   }
                 else
                   {                
                   cout << Vergleich << endl << Vergleich2 << endl << Datum <<endl;
                   }
                }
    while (FindNextFile(fHandle,&ver1));
    FindClose(fHandle);
    system ("pause");
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.11.2006, 15:32 Uhr
thorgo



O.K.
Hab's gelöst , für alle die ein ähnliches Problem haben habe ich hier die Testsyntax:


C++:
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <ctime>
using namespace std;


int main()
{
        int Durchlauf = 0;
        string Vergleich;
        string Vergleich2;
        string Vergleich3 = "_L";
        string pfad1;
        string pfad2;
        string pfad3;
        string temp;
        string temp2;
        string temp3;
        string textemp;
        string textemp2;
        HANDLE fHandle;
        HANDLE zHandle;
        HANDLE tHandle;
        ofstream logdat;
        time_t datum;
        struct tm *tmzgr;
        char Datum[30];

        datum = time(NULL);
        tmzgr = localtime(&datum);
        strftime(Datum,30,"%d""%m""%Y",tmzgr);
        WIN32_FIND_DATA ver1;  
        WIN32_FIND_DATA ver2;
        WIN32_FIND_DATA ver3;
        fHandle=FindFirstFile("c:\\Test\\ACH\\*.pdf",&ver1);
        
    do
                {
                pfad1 = "c:\\Test\\ACH\\";
                pfad2 = "c:\\Test\\ACH08112006\\";
                pfad3 = "c:\\Test\\";
                Vergleich = ver1.cFileName;    
                Vergleich2 = "c:\\Test\\ACH08112006\\";
                Vergleich2 = Vergleich2+Vergleich;
                zHandle=FindFirstFile(Vergleich2.c_str(),&ver2);
                Vergleich2 = ver2.cFileName;
                if (Vergleich != Vergleich2)  
                   {                  
                   temp = pfad1;
                   temp = temp+Vergleich;
                   temp2 = pfad2;
                   temp2 = temp2 + Vergleich;
                   temp3 = pfad3 + "ACH" + (string) Datum;
                   bool bResult  = ::CreateDirectory(temp3.c_str(),NULL);
                   CopyFile(temp.c_str(), temp2.c_str(), TRUE);                    
                   temp2 = temp3 + "\\";
                   temp2 = temp2 + Vergleich;
                   CopyFile(temp.c_str(), temp2.c_str(), TRUE);
                   temp = temp3 + "\\scheine.txt";
                  
                   }
                else
                   {                
                   cout << Vergleich << endl << Vergleich2 << endl << Datum <<endl;
                   }
                }
    while (FindNextFile(fHandle,&ver1));
    FindClose(fHandle);
    if (temp3 == pfad3 + "ACH" + (string) Datum)      
           {
           logdat.open(temp.c_str(), ios_base::out);
           temp2 = temp3 + "\\*.pdf";
           tHandle=FindFirstFile(temp2.c_str(),&ver3);
           do
           {
                    
                     textemp = ver3.cFileName;
                     logdat << textemp << endl;
                     textemp2 = textemp.substr(10, 2);
                     if (textemp2 != Vergleich3)
                     {
                                  ++Durchlauf;
                     }                  
                
           }
           while (FindNextFile(tHandle,&ver3));
           FindClose(tHandle);
           logdat << endl << "Anzahl der Scheine:" << Durchlauf << endl;
           logdat.close();          
           }    
    
    system ("pause");
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: