[anfängerfehler?]Ordnerdurchsuchen( FindNextFile stürzt ab )
-
sry vergessen 
Hilft mir aber nicht weiter, denn mein Programm stürzt irgendwo mittendrinn ab...
Irgendwass mit dem Buffer läuft nicht richtig#include <stdio.h> #include <windows.h> #define VERSION "0.00.04" struct _ITEMLIST{ char *path; struct _ITEMLIST *next; }; typedef struct _ITEMLIST ITEMLIST; void readFilesFromDirectory( char*, int* ); int main( int argc, char **argv ) /* Autor: Oliver Lippert Begin: 2008-04-10 2008-04-11 : 2008-04-14 End: ============== Description: This program should be able to "tag" each type of document. Every user should be able to search "taged" documents because its much easyer to search tags then to search names like "my*Search*Document*.*", and it should be much faster, because of the user add / delete documents to the program, so the range of search is not that big like the whole data of the users storage. */ { int files = 0; char path[] = "D:\\*"; printf( "\t\t\ttagMyData Version %s\n\n", VERSION ); Sleep( 2000 ); printf( "DIRECTORY:\t%s\n", path ); readFilesFromDirectory( path, &files ); system( "pause" ); return 0; } void readFilesFromDirectory( char *path, int *counter ) { HANDLE mySearch; WIN32_FIND_DATA fileData; int i; ITEMLIST *first = NULL, *akt = NULL; mySearch = FindFirstFile( path, &fileData ); //erste Datei auslesen if( mySearch != INVALID_HANDLE_VALUE ) { do //solange noch dateien gefunden werden { if( strcmp( ".", fileData.cFileName ) && strcmp( "..", fileData.cFileName ) && strcmp( "$RECYCLE.BIN", fileData.cFileName ) ) //unterverzeichnisse haben immer noch "." und ".." { if( fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) //gefundener Ordner { if( first == NULL ) { first = malloc( sizeof( ITEMLIST ) ); akt = first; akt->next = NULL; } else { akt = first; while( akt->next != NULL ) akt = akt->next; akt->next = malloc( sizeof( ITEMLIST ) ); akt = akt->next; akt->next = NULL; } akt->path = malloc( (strlen(path)+strlen(fileData.cFileName))*sizeof(char) ); for( i = 0; i < strlen(path)-1; i++ ) akt->path[i] = path[i]; akt->path[i] = '\0'; strcat( akt->path, fileData.cFileName ); strcat( akt->path, "\\*" ); } else //gefundene Datei { *counter += 1; printf( "FILE %6d:>\t\t%s\n", *counter, fileData.cFileName ); } } }while( FindNextFile( mySearch, &fileData ) ); FindClose( mySearch ); printf( "." ); akt = first; while( akt != NULL ) { printf( "DIRECTORY:\t%s\n", akt->path ); readFilesFromDirectory( akt->path, counter ); akt = akt->next; free( first ); first = akt; } } }Den $RECYCLE.BIN hab ich schon rausgenommen,da stürzt das auch ab...
-
Solche Fehler findet man am besten mit dem Debugger. Also VC6 starten, die Debugkonfiguration auswählen und F5 drücken. Und mit etwas Glück hält der Debugger genau an der Zeile an, welche die Probleme verursacht.
-
Bis jetzt gab es nur Probleme, wenn ich eine *.c Datei in VC6 starten wollte...
Also ich schreibe die ja in Notepad++ und da funtzt alles, aber VC6 hat komplett andere Bibliotheken oder so... Da funzt auf einmal nichts mehr,und wenn ich sage "Programm Debuggen" startet VC6 und er Zeigt wir was an, was ich aber nicht verstehen kann...
Es scheint zu entstehen, wenn nach einer Datei ein Ordner als nächstes gefunden wird...
Ich habe mal die Ausgabe mit "dir" abgeglichen...Ahso die Aktuelle ausgabe:
DIRECTORY: D:\* D:\5ac88c6caf63642340b1fb\* D:\CPROGS\* D:\*****\* D:\Debug\* D:\GUIfN\* D:\ProgPlanung\*Das sind die Inhalte der structs(siehe edit von Post)
dir zeigt an:Verzeichnis von D:\ 17.09.2007 15:25 <DIR> 5ac88c6caf63642340b1fb 07.04.2008 15:59 <DIR> CPROGS 26.03.2008 11:18 <DIR> ***** 15.02.2008 10:36 <DIR> Debug 09.04.2008 12:58 <DIR> GUIfN 08.01.2008 16:15 <DIR> ProgPlanung 18.02.2008 14:39 <DIR> psdk 12.03.2008 14:47 <DIR> sys42 08.04.2008 12:58 <DIR> VMXP03 02.04.2008 11:45 <DIR> VMXP03tmp 03.04.2008 12:41 <DIR> Windows98 SE 08.01.2008 15:17 <DIR> xamppIch habe ein System gemacht:
|:Ich lese erst die Dateien aus, zeige diese an, und rufe dann rekursiv die selbe function mit dem neuen Pfad(unterordner1) auf.:|
Das Funktioniert einfach, finde ich eien Ordner hänge ich ihn einer Liste an.
Finde ich eine Datei, zeige ich sie an.Nach der while über FindNextFile gehe ich mit einer neuen while die Liste durch und rufe die selbe Funktion mit einem neuen Pfad auf xD.
-
lippoliv schrieb:
Bis jetzt gab es nur Probleme, wenn ich eine *.c Datei in VC6 starten wollte...
Also ich schreibe die ja in Notepad++ und da funtzt alles, aber VC6 hat komplett andere Bibliotheken oder so... Da funzt auf einmal nichts mehr,und wenn ich sage "Programm Debuggen" startet VC6 und er Zeigt wir was an, was ich aber nicht verstehen kann...
Sorry, aber Du kannst nicht Notepad++ als Editor und das Forum hier als Debugger verwenden. Beschäftige Dich erst einmal mit den Grundlagen von VC6, erstelle mit dem AppWizard kleinere Projekte und spiele mit dem Debugger. Alles andere ist verschwendete Zeit.
-
Was ich von einem derartigen Programm erwarte ist, dass es im Stande sein sollte, eine normale C Datei, bei der der MinGW(gnu c) Debugger nicht meckert, auch nicht meckert...
Ich werds gleich mal machen, und ich poste dann mal was das Ding meckert, dann kannst du mir sagen, ob du irgendeine Laune hättest noch weiter damint zu Arbeiten...
Ist echt nich bös gemeint, aber ich denke halt, wenn das programm abstürzt, hab ich irgendwo einen ersichtlichen Fehler...
[edit]Gut ich habe vorschnell geurteilt sry,
es gab nur ein problem bei "i < strlen()" musste zu "i < (signed)strlen()"
Mit dem jetzigen Programm funktioniert es, woran liegt das?
-
... akt->path = malloc( (strlen(path)+strlen(fileData.cFileName))*sizeof(char) ); for( i = 0; i < strlen(path)-1; i++ ) akt->path[i] = path[i]; akt->path[i] = '\0'; strcat( akt->path, fileData.cFileName ); strcat( akt->path, "\\*" ); ...Rechne mal nach, ob der Puffer auf den akt->path nach Aufruf von malloc zeigt, überhaupt groß genug sein kann.
Btw.: Nur Klingonen programmieren mit Notepad.

-
Danke dir, das wars wirklich, hab nochmal 10 draufgepackt, jetz läufts...
Macht VC6 das wirklich?
Wegen dem aufbrausen: ich Arbeite dran

Ich mach weiter mit Notepad++, warum? Weil da kein "ICH WURDE MIT VC6-FREE GEMACHT"-Fenster am start des Programmes gemacht xD
Irgendwann nehm ich mir ecplipse
-
sri schrieb:
Sorry, aber Du kannst nicht Notepad++ als Editor und das Forum hier als Debugger verwenden. Beschäftige Dich erst einmal mit den Grundlagen von VC6, erstelle mit dem AppWizard kleinere Projekte und spiele mit dem Debugger. Alles andere ist verschwendete Zeit.
Da kann ich mich sri nur anschließen.
Das Forum hier kann Dir nur Hilfestellung geben, ist aber kein Debugger-Ersatz! Das wäre echt zuviel verlangt.Du wurdest hier im Forum schon mehrfach darauf aufmerksam gemacht worden.
Stichwort "mit dem Ruderboot übern Atlantik", erinnerst Du Dich noch daran?
Bitte, tu uns allen den Gefallen: Mach einfach mal ein kleines Projekt a la "Hello World" mit Visual C++. (Du sagtest ja mal vor ein paar Wochen oder Anfang dieses Jahres, daß Du VC++ schon besorgt hast) Und nimm Dir den längst überfälligen Abschied vom Gespann "NP++ und MinGW" vor. Punkt.
Du hast ja selbst gesagt, daß Du mal mit Delphi und dem Debugger gearbeitet hast. Ist das nicht ein Ansporn genug, endlich mal wieder genau Bescheid zu wissen, welche Werte die Variablen tatsächlich haben?
lippoliv schrieb:
Was ich von einem derartigen Programm erwarte ist, dass es im Stande sein sollte, eine normale C Datei, bei der der MinGW(gnu c) Debugger nicht meckert, auch nicht meckert...
Wenn der Visual C Compiler oder Debugger meckert, dann heißt es folgendes:
a) Deine Software ist fehlerhaft und/oder
b) Deine MinGW Umgebung ignoriert (oder unterdrückt) offensichtlich sämtliche Warnungen!Martin
Visual C++ FAQ: http://www.mpdvc.de/
MVP Visual C++ FAQ: http://vcfaq.mvps.org/
Microsoft Visual C++ Tutorials: http://msdn2.microsoft.com/en-us/library/aa733747.aspx
-
Warum nimmst du dir nicht VC 2008 Express Edition? Ist sowieso besser als das veralterte und nicht standardkonforme VC6...
Oder hat die ExpressEdition auch so einen Splashscreen?
-
@Mmacher : Ähem, hust, hust. lippolivs Problem konnte auch ohne Debugger erkannt werden.
-
merker schrieb:
@Mmacher : Ähem, hust, hust. lippolivs Problem konnte auch ohne Debugger erkannt werden.
Du hast den Sinn wahrscheinlich nicht erkannt.
Hätte lippoliv einen Debugger gehabt, wäre er mit Sicherheit von alleine auf diesen primitiven Fehler gekommen.
Außerdem wollen wir ja nicht immerzu den Ersatz-Debugger für ihn spielen.
Falls Du es nicht glauben kannst, guck mal alle Beiträge von lippoliv hier im Forum an. Irgendwann ist ja mal Schluß mit lustig.Martin