Ordner durchsuchen

Liebe und eifrige… ihr wisst schon :wink:

Ich möchte gerne ein Programm schreiben, das mir in eine txt-Datei alle Dateinamen eines Ordners schreibt. Wie schreiben, das weiss ich schon (ich bevorzuge fprintf), aber wie kommt das Programm dazu, den Ordner zu durchsuchen???
Schätze, das ist in dir.h zu finden, aber dort habe ich keine Kenntnisse :-S

Hat jemand 'nen Tipp für eine Funktion?

Danke
Kalsan

Hallo Kalsan !

Zum Auslesen eines Ordners gibts die Funktionen ‚findfirst()‘ und ‚findnext()‘.

mfg
Christof

Hallo Kalsan,

Hat jemand 'nen Tipp für eine Funktion?

Wenn du einen Tipp hast, für welches System, dann ja. Ich habe den Code für die Win32 API.
In C wird es dir wohl lieber sein, als eine C++ - Klasse, richtig?

PS: Ich habe in meinen diversen Include-Ordnern bloss ein dir.h gefunden, die rein gar nichts drin hat (bei MingW). Dürfte nicht C-Standard sein, VC6 hat sowas gar nicht.

lG
Martin B

Hallo Christof

Zum Auslesen eines Ordners gibts die Funktionen ‚findfirst()‘
und ‚findnext()‘.

Bei mir gibt es nur eine leere dir.h (bei MingW, bei VC6 gibt es diese gar nicht). Wo genau gibt es nun diese Funktionen…?
Meinst du, das seien Standard-C-Funktionen?

lG
Martin B

Hallo Kalsan,

Hallo Martin
ich fasse mich kurz:

Wenn du einen Tipp hast, für welches System, dann ja. Ich habe
den Code für die Win32 API.

Ja, Dev-C++ Windows

In C wird es dir wohl lieber sein, als eine C++ - Klasse,
richtig?

Ja, gerne

PS: Ich habe in meinen diversen Include-Ordnern bloss ein
dir.h gefunden, die rein gar nichts drin hat (bei MingW).
Dürfte nicht C-Standard sein, VC6 hat sowas gar nicht.

Ach so, danke, also was Anderes

lG
Martin B

Hallo Martin !

Bin zur Zeit auf Urlaub und habe daher keinen Zugriff auf mein VC, weiss daher das Includefile nicht.
Die Funktionen in VC selbst heissen jedenfalls ‚_findfirst()‘ und ‚_findnext()‘, für genaueres musst du im Online-Help nachsehen (oder du wartest bis nächste Woche wenn ich aus dem Urlaub zurück bin :smile: ).

(Für Linux heissen die entsprechenden Funktionen übrigens ‚opendir()‘ und ‚readdir()‘.)

mfg
Christof

Hallo

Ach so, danke, also was Anderes

Für den Dev-C++ brauchst Du die Win32-Datei/Verzeichnis-
funktionen, aber am besten, Du schreibst Dir je eine
Variante (falls nötig) für Win32 und für Linux.

Das Hauptprogramm sähe so aus:

#include 
#include 
using namespace std;
 
 int listdir(const char \*path, vector& sv, bool wantsort=true);
 
 int main(int argc, char\*argv[])
{
 char ausgabename[] = "dateien.txt";
 vector fnames;
 
 if(listdir("c:\\temp", fnames)) {
 FILE \*outfile = fopen(ausgabename, "wt");
 vector::const\_iterator p;
 for(p=fnames.begin(); p!=fnames.end(); ++p) 
 fprintf(outfile, "%s\n", p-\>c\_str());
 fclose(outfile);
 }

 return 0;
} 

d.h., Du benutzt eine selbstgeschriebene Funktion „listdir()“
für die jeweilige Umgebung.

Für Win32/Dev-C++/MinGW sähe diese so aus:

#if defined (\_WIN32) // this works on MinGW/Win32 and on the Microsoft family

 #include 
 #include 
 #include 
 
 int listdir(const char \*path, std::vector& sv, bool wantsort)
{
 int count=0;
 char currdir[\_MAX\_PATH], srchdir[\_MAX\_PATH]; 
 char \*tr(char \*pbuf, char c\_old, char c\_new);

 \_getcwd(currdir, sizeof(currdir));
 strcpy(srchdir, path);
 char \*p = tr(srchdir, '/', '\\'); // Modify input path, change / to \ ...
 
 // return if we are unable to locate the directory
 if(\_chdir(srchdir)) return 0; 

 struct \_finddata\_t c\_file;
 intptr\_t hFile;
 // Find first file in the current (changed) directory 
 if( (hFile=\_findfirst("\*", &c\_file)) != -1 ) {
 do {
 if(! (c\_file.attrib & (\_A\_SUBDIR|\_A\_SYSTEM|\_A\_HIDDEN)) ) 
 sv.push\_back(c\_file.name), count++;
 // ok, access next directory entry
 } while(\_findnext(hFile, &c\_file) == 0);
 if(wantsort) std::sort(sv.begin(), sv.end());
 \_findclose(hFile); 
 }

 \_chdir(currdir);
 return count;
}

#else

 int listdir(const char \*path, std::vector& sv, bool wantsort) {
 // TODO: Unix version
 return 0;
 }
#endif

 char \*tr(char \*pbuf, char c\_old, char c\_new) // Perls tr//
{
 char \*p = pbuf;
 if(p != NULL) {
 while( (p=strchr(p, c\_old)) != NULL ) \*p++ = c\_new;
 }
 return pbuf;
}

Du bräuchtest also eigentlich nur die beiden
Codeabschnitte untereinanderkopieren und es
sollte gehen.

Obiges listet Dir die regulären Dateien, also
alles was nicht

 ...
 if(! (c\_file.attrib & (\_A\_SUBDIR|\_A\_SYSTEM|\_A\_HIDDEN)) ) 
 ...

ist.

Grüße

CMБ

Hallo Christof

Vielen Dank für deine Antwort.
Könntest du mir vielleicht noch rasch angeben, in welcher Bibliothek sich die Funktion befindet und welche Parameter sie aufnimmt?

Danke
Kalsan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Semjon

Vielen Dank für deine Antwort.
Leider funktioniert das Programm so nicht, wie du’s mir gegeben hast. Anscheinend fehlen einige Variablendeklarationen, eine Include-Datei und mit der Syntax :: kommt der Compiler auch nicht zurecht. Ich kann die Fehler nicht beheben, weil mir der Code zu hoch ist (ich bin noch ein Anfänger in C).
Hier ist der genaue Compiler-Log von Dev-C++:

Compiler: Default compiler
Building Makefile: "D:\Sandro (frei)\Programmierung\Makefile.win"
Führt make... aus
make.exe -f "D:\Sandro (frei)\Programmierung\Makefile.win" all
gcc.exe -c main2.c -o main2.o -I"include" 

main2.c:6:21: algorithm: No such file or directory
main2.c:8: error: syntax error before "std"
main2.c:21: error: syntax error before "std"
main2.c: In function `listdir':

main2.c:28: error: `path' undeclared (first use in this function)
main2.c:28: error: (Each undeclared identifier is reported only once
main2.c:28: error: for each function it appears in.)
main2.c:40: error: `sv' undeclared (first use in this function)

main2.c:43: error: `wantsort' undeclared (first use in this function)
main2.c:43: error: syntax error before ':' token

make.exe: \*\*\* [main2.o] Error 1

Ausführung beendet

Danke für die Geduld mit mir :stuck_out_tongue:
Kalsan

Hier das genaue Programm:

#include 
#include 
#if defined (\_WIN32) // this works on MinGW/Win32 and on the Microsoft family
#include 
#include 
#include 

int listdir(const char \*path, std::vector& sv, bool wantsort);


int main(int argc, char \*argv[])
{
 printf("%s\n",argv[1]); //Dies ist noch ein Überbleibsel eines anderen Programms, später will ich dann hier das Hauptprogramm hinschreiben.
 system("PAUSE"); 
 return 0;
}



 
 int listdir(const char \*path, std::vector& sv, bool wantsort)
{
 int count=0;
 char currdir[\_MAX\_PATH], srchdir[\_MAX\_PATH]; 
 char \*tr(char \*pbuf, char c\_old, char c\_new);

 \_getcwd(currdir, sizeof(currdir));
 strcpy(srchdir, path);
 char \*p = tr(srchdir, '/', '\\'); // Modify input path, change / to \ ...
 
 // return if we are unable to locate the directory
 if(\_chdir(srchdir)) return 0; 

 struct \_finddata\_t c\_file;
 intptr\_t hFile;
 // Find first file in the current (changed) directory 
 if( (hFile=\_findfirst("\*", &c\_file)) != -1 ) {
 do {
 if(! (c\_file.attrib & (\_A\_SUBDIR|\_A\_SYSTEM|\_A\_HIDDEN)) ) 
 sv.push\_back(c\_file.name), count++;
 // ok, access next directory entry
 } while(\_findnext(hFile, &c\_file) == 0);
 if(wantsort) std::sort(sv.begin(), sv.end());
 \_findclose(hFile); 
 }

 \_chdir(currdir);
 return count;
}

#else

 int listdir(const char \*path, std::vector& sv, bool wantsort) {
 // TODO: Unix version
 return 0;
 }
#endif

 char \*tr(char \*pbuf, char c\_old, char c\_new) // Perls tr//
{
 char \*p = pbuf;
 if(p != NULL) {
 while( (p=strchr(p, c\_old)) != NULL ) \*p++ = c\_new;
 }
 return pbuf;
}

Hallo

Vielen Dank für deine Antwort.
Leider funktioniert das Programm so nicht, wie du’s mir
gegeben hast. Anscheinend fehlen einige
Variablendeklarationen, eine Include-Datei und mit der Syntax
kommt der Compiler auch nicht zurecht.

Du speicherst den Quelltext als c+±Datei,
z.B. kalsan.cxx ab und versuchst es noch einmal
(ich habe Deinen Quelltext minimal verändert).
Möglicherweise mußt Du Dein Projekt als
„gemischtes C++ Projekt“ oder so anlegen. Aber
der Dev-C++ hat das schon alles drin.

[kalsan.cxx]

#include 
#include 
#include 
#include 
using namespace std;

 int listdir(const char \*path, vector& dateinamen, bool wantsort=true);

// hier fast nur C (als C++ kompiliert)
 
 int main(int argc, char \*argv[])
{
 char \*ausgabename = "dateien.txt";
 char \*verzeichnis = "c:\\windows";
 vector dateinamen;

 printf("%s\n",argv[1]); //Dies ist noch ein Überbleibsel eines anderen Programms, später will ich dann hier das Hauptprogramm hinschreiben.

 system("PAUSE"); 
 return 0;
}

// ab hier mehr C++

#if defined (\_WIN32) // this works on MinGW/Win32 and on the Microsoft family
 #include 
 #include 
 #include 
 
 int listdir(const char \*path, std::vector& sv, bool wantsort)
{
 int count=0;
 char currdir[\_MAX\_PATH], srchdir[\_MAX\_PATH]; 
 char \*tr(char \*pbuf, char c\_old, char c\_new);

 \_getcwd(currdir, sizeof(currdir));
 strcpy(srchdir, path);
 char \*p = tr(srchdir, '/', '\\'); // Modify input path, change / to \ ...
 
 if(\_chdir(srchdir)) return 0; // return if we are unable to locate the directory

 struct \_finddata\_t c\_file;
 intptr\_t hFile;
 // Find first file in the current (changed) directory 
 if( (hFile=\_findfirst("\*", &c\_file)) != -1 ) {
 do {
 if(! (c\_file.attrib & (\_A\_SUBDIR|\_A\_SYSTEM|\_A\_HIDDEN)) ) {
 sv.push\_back(c\_file.name), count++;
 } // ok, access next directory entry
 } while(\_findnext(hFile, &c\_file) == 0);
 if(wantsort) std::sort(sv.begin(), sv.end());
 \_findclose(hFile); 
 }

 \_chdir(currdir);
 return count;
}
#else
 #include 
 #include 
 #include 

 int listdir(const char \*path, vector& sv, bool wantsort)
{
 int count=0;
 DIR \*dirh = opendir(path); // open directory
 if(dirh != NULL) { 
 struct dirent \*d;
 while((d = readdir(dirh)) != NULL) {
 if(d-\>d\_type == DT\_REG) {
 sv.push\_back(d-\>d\_name), count++;
 }
 }
 if(wantsort) std::sort(sv.begin(), sv.end());
 closedir(dirh);
 }
 return count;
}
#endif

 char \*tr(char \*pbuf, char c\_old, char c\_new) // simple tr//
{
 char \*p = pbuf;
 if(p != NULL) {
 while( (p=strchr(p, c\_old)) != NULL ) \*p++ = c\_new;
 }
 return pbuf;
}

Grüße

CMБ

Hallo Kalsan!

Ich bin nun C++ -Mensch, habe mich aber bemüht, das möglichst C-gemaess zu schreiben. Die zwei Strings, dir man als erstes von Win32 kriegt, sind „.“ und „…“ (aus historischen Gruenden).
Siehe den Code weiter unten.

lG
Martin B

#include 
#include 

char\* dirList(char \*path, int \*isDir, DWORD \*size)
{
 static WIN32\_FIND\_DATAA wfd;
 static HANDLE hFind;
 size = 0;
 /\* if (!isDir || !size) {return "error: pointers have no memory...\n";}
 \*/

 if (path)
 {
 ZeroMemory(&wfd, sizeof(WIN32\_FIND\_DATAA));
 hFind = INVALID\_HANDLE\_VALUE;
 hFind = FindFirstFile(path, &wfd);
 if (hFind == INVALID\_HANDLE\_VALUE)
 {FindClose(hFind); return 0;}
 }
 else {
 if (! FindNextFile(hFind, &wfd))
 {FindClose(hFind); return NULL;}
 }

 if (wfd.dwFileAttributes & FILE\_ATTRIBUTE\_DIRECTORY)
 { \*isDir = 1; 
 /\* \*size = 0; \*/
 }
 else
 { \*isDir = 0; 
 /\* \*size = wfd.nFileSizeLow; \*/
 }

 return wfd.cFileName;
}

int main()
{
 /\* "C:/winnt/\*.\*"; = Ordner und Dateien kriegen 
 (\*.\* in beliebiger Kombination) \*/
 char \*findWhere = "C:/winnt/\*.ini"; 
 DWORD gr = 0;
 int isDir = 0;

 printf ("press any key to read:\n");
 /\* beim ersten Mal Pfad uebergeben... \*/
 char \*got = dirList(findWhere, &isDir, &gr);
 do
 {
 if ((\*got == '.') || (\*got == '?')) {continue;}
 printf ("%c %s\n", (isDir ? 'D' : ' '), got);
 } 
 /\*...dann NULL \*/
 while (got = dirList(NULL, &isDir, &gr));

 system("pause");
 return 0;
}

Hallo Christof!

Danke für die rasche Antwort. Ich habe hier
http://www.cplusplus.com
(Suchmaske) nachgesehen, aber nichts gefunden. Aber das ist kein Drama, ich habe ja die WIN_API-Lösung (siehe oben), du brauchst dir also damit keine Mühe machen. Ich fragte mehr interessehalber.

lG
Martin B

Hallo Semjon

Ich habe die Datei in main2.cxx umbenennt und Dev-C++ angewiesen, sie als C++ zu komplimieren. Jetzt sieht’s noch schlimmer aus:

Compiler: Default compiler
Building Makefile: "D:\Sandro (frei)\Programmierung\Makefile.win"
Führt make... aus
make.exe -f "D:\Sandro (frei)\Programmierung\Makefile.win" all
g++.exe -D\_\_DEBUG\_\_ -c main2.cxx -o main2.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include" -pg -g3

gcc.exe -D\_\_DEBUG\_\_ main2.o -o "Projekt2.exe" -L"lib" -lgmon -pg -g3 

main2.o(.text+0x3e): In function `ZNSt24\_\_copy\_backward\_dispatchIPSsS0\_12\_\_false\_typeE4copyES0\_S0\_S0\_':
C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text+0x1c4): In function `Z7listdirPKcRSt6vectorISsSaISsEEb':
D:/Sandro (frei)/Programmierung/main2.cxx:31: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text+0x2c7):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::allocator::allocator()'
main2.o(.text+0x2f6):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::basic\_string, std::allocator \>::basic\_string(char const\*, std::allocator const&amp:wink:'

main2.o(.text+0x35a):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text+0x380):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text+0x39c):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::allocator::~allocator()'
main2.o(.text+0x3ce):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `std::allocator::~allocator()'
main2.o(.text$\_ZNSt6vectorISsSaISsEED1Ev[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::~vector()]+0x16): In function `ZNSt24\_\_copy\_backward\_dispatchIPSsS0\_12\_\_false\_typeE4copyES0\_S0\_S0\_':
C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZNSt12\_Vector\_baseISsSaISsEED2Ev[std::\_Vector\_base, std::allocator \>, std::allocator, std::allocator \> \> \>::~\_Vector\_base()]+0x16):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZSt10\_ConstructISsSsEvPT\_RKT0\_[void std::\_Construct, std::allocator \>, std::basic\_string, std::allocator \> \>(std::basic\_string, std::allocator \>\*, std::basic\_string, std::allocator \> const&amp:wink:]+0x16):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZSt10\_ConstructISsSsEvPT\_RKT0\_[void std::\_Construct, std::allocator \>, std::basic\_string, std::allocator \> \>(std::basic\_string, std::allocator \>\*, std::basic\_string, std::allocator \> const&amp:wink:]+0x70):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::basic\_string(std::string const&amp:wink:'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x19):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x91):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::basic\_string(std::string const&amp:wink:'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x10c):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::string::operator=(std::string const&amp:wink:'

main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x12f):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x168):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x291): In function `Z7listdirPKcRSt6vectorISsSaISsEEb':
D:/Sandro (frei)/Programmierung/main2.cxx:45: undefined reference to `\_\_cxa\_begin\_catch'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x2d7):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `\_\_cxa\_rethrow'
main2.o(.text$\_ZNSt6vectorISsSaISsEE13\_M\_insert\_auxEN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsS1\_EERKSs[std::vector, std::allocator \>, std::allocator, std::allocator \> \> \>::\_M\_insert\_aux(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, std::basic\_string, std::allocator \> const&amp:wink:]+0x323):smiley::/Sandro (frei)/Programmierung/main2.cxx:48: undefined reference to `\_\_cxa\_end\_catch'
main2.o(.text$\_ZSt16\_\_introsort\_loopIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEiEvT\_S7\_T0\_[void std::\_\_introsort\_loop, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int\>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int)]+0x19): In function `ZNSt24\_\_copy\_backward\_dispatchIPSsS0\_12\_\_false\_typeE4copyES0\_S0\_S0\_':
C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZSt16\_\_introsort\_loopIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEiEvT\_S7\_T0\_[void std::\_\_introsort\_loop, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int\>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int)]+0x137):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::basic\_string(std::string const&amp:wink:'
main2.o(.text$\_ZSt16\_\_introsort\_loopIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEiEvT\_S7\_T0\_[void std::\_\_introsort\_loop, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int\>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int)]+0x186):C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text$\_ZSt16\_\_introsort\_loopIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEiEvT\_S7\_T0\_[void std::\_\_introsort\_loop, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int\>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, int)]+0x1b9): In function `Z7listdirPKcRSt6vectorISsSaISsEEb':
D:/Sandro (frei)/Programmierung/main2.cxx:31: undefined reference to `std::basic\_string, std::allocator \>::~basic\_string()'
main2.o(.text$\_ZSt12partial\_sortIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEEvT\_S7\_S7\_[void std::stuck\_out\_tongue:artial\_sort, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \> \>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> &gt:wink:]+0x16): In function `ZNSt24\_\_copy\_backward\_dispatchIPSsS0\_12\_\_false\_typeE4copyES0\_S0\_S0\_':
C:/Programme/Dev/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl\_heap.h: undefined reference to `\_\_gxx\_personality\_sj0'
main2.o(.text$\_ZSt12partial\_sortIN9\_\_gnu\_cxx17\_\_normal\_iteratorIPSsSt6vectorISsSaISsEEEEEvT\_S7\_S7\_[void std::stuck\_out\_tongue:artial\_sort, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \> \>(\_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector, std::allocator \>, std::allocator, std::allocator \> \> \> \>, \_\_gnu\_cxx::\_\_normal\_iterator, std::allocator \>\*, std::vector

Hallo Martin

Herzlichen Dank für deine sehr ausführliche Hilfe, die dich sicher viel Zeit gekostet hat. Das Problem ist gelöst, dein Programm funktioniert!
*4u

Danke
Kalsan

Hallo

Ich habe die Datei in main2.cxx umbenennt und Dev-C++
angewiesen, sie als C++ zu komplimieren. Jetzt sieht’s noch
schlimmer aus:

g++.exe -D__DEBUG__ -c main2.cxx -o main2.o
-I"lib/gcc/mingw32/3.4.2/include"
-I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32"
-I"include/c++/3.4.2" -I"include" -pg -g3

ok., g++ compiler

gcc.exe -D__DEBUG__ main2.o -o „Projekt2.exe“ -L"lib" -lgmon

*Hier* liegt das Problem. Du hast ein C-Projekt er-
öffnet und der C-Compiler gcc bindet nicht standardmäßig die
C+±Sachen ein. Hier müßte auch stehen „g++.exe …“

Die Kompilation klappt ja, nur das Linken nicht. Wenn
Du sowieso vorhast, hin und wieder C++ neben C zu
verwenden, solltest Du immer „C+±Projekt“ beim Dev-CPP
auswählen.

Grüße

CMБ

Die Kompilation klappt ja, nur das Linken nicht. Wenn
Du sowieso vorhast, hin und wieder C++ neben C zu
verwenden, solltest Du immer „C+±Projekt“ beim Dev-CPP
auswählen.

Grüße

CMБ

Dann werde ich’s in Zukunft immer so machen, danke für den Tipp!
Das Problem wurde mit /t/ordner-durchsuchen/4942676/11

Danke für deine Hilfe
Kalsan