Fehler in der FAQ /verzeichnisse browsen..
-
erstmal danke an den der die FAQ geschrieben hat,genau das was ich suchte.
leidre haben sich da wohl mehrere fehler eingeschlichen,hat ja vielleicht was mit dem neuem gcc 3.2 zu tun ???vorabinfo: linux: Slackware current mit gcc3.2
krieg andauernd als fehlemeldung:
bash-2.05b$ g++ -c auslesen.cpp
auslesen.cpp:19:35: warning: multi-character character constant
auslesen.cpp: In functionint main()': auslesen.cpp:19: invalid conversion from \
int' to `const char*'
auslesen.cpp:36:2: warning: no newline at end of file
bash-2.05b$hab das ganze reduzieren können auf:
#include <iostream> //oder #include <iostream>
#include <stdlib.h>
#include <errno.h>
#include <types.h>
#include <stat.h>
#include <dirent.h>using namespace std;
int main ()
{
cout << " VERZEICHNISS AUSLESEN\n " ;struct stat FileInfo ;
struct dirent CurrentFile ;
DIR *Directory ;
char Path[30];if ( (Directory = opendir('/tmp'))== NULL )
{ cout << "SHIT" ;}
else cout << "sieht gut aus ";}
und die fehlermeldung bleibt wenn ich ==NULL weglasse..
ist Directory ein int - wert ?
änderungen am code betreffen nur cin/cout damit er für mich leichter verständlich ist.
weiss jemand hilfe / kann die FAQ updaten ?
thxPS:hätte das jetzt in c++ gehört ?
-
opendir("/tmp")
warning: multi-character character constant
weil er in '' nur ein char erwartet oder eine escapesequenz '\n'
invalid conversion from `int' to `const char*'
weil das was in '' ist ein char ist und opendir erwartet ein const char *
warning: no newline at end of file
mach mal hinter den lezten } eine leerzeile
ob das nach c++ gehört hätte?, offt läst sich das nicht genau sagen, in diesen fall ja, aber das kann der fragende offt selber nicht wissen
-
mein fehler,ich hatte mit ' und " rumexperimenriert. bei ' gibt´s leider den gleichen fehler... also:
if ( (Directory = opendir('/tmp'))== NULL )
&nach dem ketzte } 3 zeilen frei
ergibt:bash-2.05b$ g++ -c auslesen.cpp
auslesen.cpp:19:35: warning: multi-character character constant
auslesen.cpp: In functionint main()': auslesen.cpp:19: invalid conversion from \
int' to `const char*'
auslesen.cpp:26:2: warning: no newline at end of file
-
Hi,
du hast voellig recht, es sind Fehler in diesem Code-Ausschnitt (Sorry!!).
Wie du gesagt hast:
if ( ( Directory = opendir ( '/tmp' ) ) == NULL )
Das muss
if ( ( Directory = opendir ( "/tmp" ) ) == NULL )
heissen.
Das hier ist natuerlich auch falsch:
if ( strcmp ( CurrentFile -> d_name, "." ) && strcmp ( CurrentFile -> d_name, ".." )
es muss so heissen:
[cpp]
if ( strcmp ( CurrentFile -> d_name, "." ) &&
strcmp ( CurrentFile -> d_name, ".." ) )[/cpp]Eine ) vergessen.
Nochmals sorry fuer die Fehler.
@Mods: Korrigiert das bitte in der FAQ (oder kann auch ich in der FAQ
korrigieren??mfg
v R
-
Hi,
ich nochmal. Hab noch einen Fehler gefunden.
es muss
[cpp]
struct dirent *****CurrentFile;[/cpp]statt
struct dirent CurrentFile;
heissen.
Ich glaub ich werd mir das erst nochmal komplett durchlesen
mfg
v R
-
@LongJohn
Danke für die Hilfe@vr
kannst du auch selber machen.
-
Hi,
ist korrigiert.
mfg
v R
-
jep,sieht jetzt gut aus,danke für die schnellen antworten.
aber noch eine frage:wenn der code so aussieht:
if ( (Directory = opendir( "/tmp"))== NULL )
{ cout << "SHIT" ;}
else cout << "sieht gut aus ";sagt er immer "sieht gut aus" egal ob er ein /tmp verzeichnis hat oder nicht..
wie krieg ich das jetzt noch hin ?
-
Hi,
das ist aber sehr merkwuerdig. Bei mir bringt er dann ne Fehlermeldung, dass
das Verzeichnis oder die Datei nicht gefunden wurde.Wie sieht denn der Rest deines Programms aus? Hast du es 1:1, per c&p,
uebernommen?mfg
v R
-
ja,hatte ich ursprünglich.hatte dann aber so 25 fehlermeldungen. ich bin dann so vorgegangen:
-die richtigen header von /usr/include nach /usr/include/c++/3.2
(stat.h für sys/stat und types.h for sys/types)
-cout und cin eingesetzt wo sinnvoll
-dann gekürzt bis nur noch dieses stümmelchen übrig war,ich wollte mit jeder einzelnden funktion rumspielen bis ich sie verstanden habe..also folgendes kompiliert fehlerfrei:
#include <iostream>
#include <stdlib.h>
#include <errno.h>
#include <types.h>
#include <stat.h>
#include <dirent.h>using namespace std;
int main ()
{
cout << " VERZEICHNISS AUSLESEN\n " ;struct stat FileInfo ;
struct dirent CurrentFile ;
DIR *Directory ;
char Path[30];if ( (Directory = opendir( "/tmp"))== NULL )
{ cout << "SHIT" ;}
else cout << "sieht gut aus ";}
Und Dann :
bash-2.05b$ g++ -c auslesen.cpp
bash-2.05b$ g++ -o auslesen auslesen.o
bash-2.05b$ auslesen
VERZEICHNISS AUSLESEN
sieht gut aus bash-2.05b$
bash-2.05b$ cd testverzeichnis //hier gibt es kein /tmp unterverzeichniss !
bash-2.05b$ auslesen //hab davor auslesen rüberkopiert !
VERZEICHNISS AUSLESEN
sieht gut aus bash-2.05b$
bash-2.05b$
-
/tmp hängt ja nicht von deiner aktuellen Position im FS ab, sondern zeigt ja an, dass es direkt im Root Direktory hängt. Benutz mal tmp anstelle /tmp
-
JaJaJAAAA !
..darauf hätte ich selber kommen können !
danke noch mal
-
und noch einmal:
while ( ( CurrentFile = readdir ( Directory ) ) != NULL )ergibt immer:
auslesen.cpp: In functionint main()': auslesen.cpp:27: no match for
dirent& = dirent*' operator
/usr/include/bits/dirent.h:24: candidates are: dirent& dirent::operator=(const
dirent&)
auslesen.cpp:34:d_name' undeclared (first use this function) auslesen.cpp:34: (Each undeclared identifier is reported only once for each function it appears in.) auslesen.cpp:34: cannot convert \
dirent' to `const char*' for argument `2' to `
char* strcat(char*, const char*)'und das "->",wird immer falsch gewertet,ich ersetzte es durck kommata-ist das richtig ?
kann irgendjemand das prog aus der faq tatsächlich kompilieren ?strcat ( Path, CurrentFile -> d_name )
-
Hi,
ja, die Funktion ist nicht korrekt. Hab ich uebersehn, sorry.
auch hier muss es 'struct dirent *' bei der deklaration heissen und es muss
der '->' operator statt der '.' operator genutzt werden.Sowas kommt davon, wenn man zu schnell schreibt und nicht richtig nachdenkt.
Morgen werd ich den FAQ-Eintrag korrigieren (geht hier von zu Hause nicht,
da ich immer noch nicht meinen Rechner hab und hier am Server sitze und da
hab ich nur konsole zur Verfuegung, weswegen ich hier nicht so gut korrigieren
kann).Nochmals sorry, dass dermassen schwere Fehler in den Beitrag gekommen sind.
mfg
v R
-
versteh ich jetzt nicht.
bitte las es durch ´n kompiler laufen,ich komm mir so ungeschickt vor wenn ich mir jede zeile einzeln erklären lasse