Q: Daten suchen und Kopieren
-
Hallo erstmal.
Also, ich, recht jung in der sprache suche hilfe zwecks eines zu programmierenden Programms.
Sollte ich hier im Falschen Thread gelandet sein, möge man dies als Anfängerfehler abtun und den Thread verschieben! Thanks!Problem: Ich brauche ein Programm (Konsole) welches vom win Taskmanager um ??:?? uhr aufgerufen wird und selbstständig z.B. eine festplatte (oder CWD und eben unterordner) absucht. Wobe die anzahl der ebenen/ Unterordnern nicht bekannt sind.
Ferner sollte dieses Programm die gefundenen Dateen/ Pfade Interpretieren und die daten dementsprechend wieder sortiert/ Umbenannt in ein zielverzeichnis kopieren.
Aktuellere daten der Quelle sollen auch zum Ziel kopiert werdenRTFM:
-wie dein Wissensstand aussieht (welche Teile der Sprache kannst du und welche nicht, was verstehst du und was nicht)
Grundstudium Mechatronik Semester 1 N-Damen problem programmiert und kapiert
- was du ueberhaupt erreichen willst
Hilfe von so vielen menschen wie nur möglich. Codefetzen, Ideen, Antworten auf die Frage, wie ich der findfirst /next klar mach, was sie alles schon gefunden hat, woher sie kommt und wohin sie geht.
- was du schon versucht hast, um das Problem zu beheben...
Habs mit findfirst und findnext versucht. Klappt auch recht gut, aber meine funktion(en) blicken keine unterverzeichnisse. Oder sie vergessen sie wieder!
- ...und was davon wie ausgegangen ist
Finde durch 3 Funktionen die ordner im working directory und 2 ebenen "dahinter"
- welche anderen Quellen du nach hilfreichen Informationen abgesucht hast...
Suche in diesem forum, gegooglet, kollegen, Komulitonen, aso...!
- ...was du gefunden hast und...
Nichts! Also, nichts passendes. (sonst würd ich mich ja nicht extra hier anmelden
- ...warum du das gefunden hast, was du gefunden hast ("ich finde nichts bei google" ist daemlich)
Wie wärs mit "ich finde nichts bei Yahoo? Ne scherz! Ich finde nichts, weil alle in nur einem Operationsverzeichnis nach daten suchen. Ich will aber auch ALLE unterverzeichnisse durchsuchen und ALLE *.PDF dateien finden, den pfad interpretieren und die dateien umbenennen/ Kopieren
Greetings and thanks!!!
:edited: PS: Ich hab blöderweise den DEV C++. Sollte hier doch ein begriff sein, oder?
-
da die gängigen betriebssysteme auf unterschiedliche dateisysteme setzen, wirst du nicht um betriebssystem-spezifische funktionen herumkommen.
probier's also mal im win-api forum oder dos/win32 konsole, da wird man dir sicher helfen können
-
findfirst, findnext sind richtig fuer windows.
du willst allerdings deine rekursion in den griff bekommen.
-
^^und genau das ist mein problem. Im netzt fin d ich so viel quelltext über VB. Sogar genau das was ich brauc. Allerdings bin ich nur der C sprache mächtig. Weiteres problem: Auf der arbeit kein internet!
Also, wie bekomm ich die find next und findfirst rekursiv hin?
Hat jemand ein beispiel?
Ich versuchs momentan die gefundenen ordner in ein array zu schreiben und dieses dann wieder an den gerade gesuchten pfad anzuhängen.Danke!
Greetings
Schon wieder edited:
Wie kann ich win API funktionen einbinden? Hatt ich noch nie. War heute auch ein Thema. Und kann mir jemand die mailen/ Sagen wo ich die find? Ist doch eigendlich ne dll, oder?
-
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608
Musst dir nur das richtige Beispiel raussuchen.
Bitte. Danke. Tschüss.
-
Bitte. Danke. Tschüss.
-
Hmm? Was ist denn
?
-
Noctis: du weisst nicht was rekursion ist. informiere dich ueber rekursion.
-
ja, ne funktion die sich selbst aufruft. Die aber jederzeit gestoppt werden kann
habs jetzt zum teil. allerdings ohne Rekursion. Mach mit dem "system" Befehl eine "verzeichnisdatei" und les diese wieder aus. So hab ich gleichzeitig ein protokoll und kann nicht gewünschte pfade einfach aus der txt datei löschen.
main() { system("dir E:\\CAE\\ /ad /b /l /s > E:\\CAE\\Verzeichnisse.txt"); //erstellen }
wie kann ich dieser funktion sagen, dass das verzeichnis dynamisch ist und nicht wie jetzt statisch?
Also mit 'defines' oder 'scanfs'greetings
-
ich verstehe nicht.
wenn du einen string neu aufbauen willst, guck dir sprinf an.
-
nein, hassu falsch verstanden, oder ich falsch beschrieben.
Ich such ne möglichkeit in den system befehl variablen einzubauen. Allerdings denk ich nicht, das das geht.
In diesem fall will ich ne ini schreiben in der das zielverzeichnis (oben: E:\...) steht.wie könnt ich sowas realisieren?
greets
-
mit sprintf
-
beispiel?
Mit sprintf tuh ich doch was in nen string schreiben/ Kopieren. Ich will allerdings das zeug in den system befehl rein schreiben.
Oder meinst du, den gesammten inhalt in nen string zu schreiben? Das wäre matürlich ne lösung.Greets
-
-
kann es sein, dass wir aneinander vorbeischreiben? Das mit dem string kopieren/ in einen string schreiben wusst ich schon, die frage ist, wie ich das in den system befehl einbinden kann.
also:
system("dir/s >list.txt")
wird zu
system("%s",strin1)???greets
-
Bitte tu DIR und UNS den Gefallen und lern C.
-
char foo[100];
sprintf(foo, "yadda %s yadda %d", "lol", 42);
system(foo);Noctis, *wirklich*, erst lernen und dann frickeln.
http://www.pronix.de/pronix-4.html
-
cool, dass man hier von unregistrierten benutzern so nett empfangen wird.
War zumindes aus meiner sicht ne ganz normale frage. Das mit dem "du kannst nen string in den system befehl schreiben" wusst ich net.
Steht auch nicht in dem Bibliotheksbuch vom Borland.aber danke @c.rackwitz
-
Noctis schrieb:
"du kannst nen string in den system befehl schreiben"
ist auch falsch.
du rufst eine funktion mit einem string als argument auf. ob der nun eine konstante oder vorher mit sprintf befuellt ist, ist irrelevant fuer system().gib das buch zurueck; es taugt offensichtlich nichts und bringt dir veraltete sprache bei.
sieh dir das an: http://www.pronix.de/pronix-4.html
-
@Noctis: hm, nachdem das ganze nach windows user riecht...
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <direct.h> #include <windows.h> inline bool getCwd( char **ppcDest ); bool runThrough( char *pcDir ); int main( int argc, char *argv[] ) { char *cwd = NULL; if( !getCwd( &cwd ) ) { cprintf( "Couldn't determine current working directory!\r\n" ); getch(); return -1; } cprintf( "%s\r\n", cwd ); // begin our cracy run ;) runThrough( cwd ); free( cwd ); return 0; } inline bool getCwd( char **ppcDest ) { return ( *ppcDest = _getdcwd( _getdrive(), NULL, 0 ) ) != NULL; } bool runThrough( char *pcDir ) { char *pcFindPattern = (char*) malloc( strlen(pcDir) + 3 ); if( !pcFindPattern ) return false; sprintf( pcFindPattern, "%s\\*", pcDir ); WIN32_FIND_DATA findData; HANDLE hFind = FindFirstFile( pcFindPattern, &findData ); free( pcFindPattern ); if( hFind == INVALID_HANDLE_VALUE ) return false; do { cprintf( "%s\r\n", findData.cFileName ); if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if( strncmp( findData.cFileName, ".", strlen(findData.cFileName) ) != 0 && strncmp( findData.cFileName, "..", strlen(findData.cFileName) ) ) { char *pcSubDir = (char*) malloc( strlen(pcDir) + strlen(findData.cFileName) + 2 ); if( !pcSubDir ) { FindClose( hFind ); return false; } sprintf( pcSubDir, "%s\\%s", pcDir, findData.cFileName ); runThrough( pcSubDir ); free( pcSubDir ); } } } while( FindNextFile( hFind, &findData ) ); FindClose( hFind ); }
aber bitte, um himmelswillen, google mal nach rekursion
@ others: Könnt' das mal einer lesen, der Ahnung hat? Hab' schon ziemlich lange nix mehr proggt -> gebt euren Senf dazu
greetz, neox86