Fehler in der FAQ /verzeichnisse browsen..



  • 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 function int 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 function int main()': auslesen.cpp:27: no match fordirent& = 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 😃


Anmelden zum Antworten