Prüfen auf welchem Laufwerk welche Datei ist



  • Das funktionierte leider auch nicht aber der Operator + hat mir geholfen^^

    So funktioniert :>

    int check_file()
    {
    
    string  path [] = {"c:\\test"};
    
    char alph[] = {'A','B','C'};
    
    for (int i=0;i<3;i++) // A bis c
    {
    
    ifstream datei( alph[i] + "\\test.txt " );
    
    cout<<alph[i];
    
            if (datei.good() )
            {
                    cout<<"ok"<<endl;
                    return 1;
            }
    
    }
    
    return 0;
    }
    


  • Oops

    for (int i=0;i<4;i++) // A bis c

    Die Schleife muss bis 4 Zählen.

    Wenn ich die Schleife nur bis 3 Zählen lasse dann werden mir zwar auch alle
    Buchstaben angezeigt aber dann funktioniert es nicht komischerweise hat wer dafür eine erklärung ?

    Ansonsten guck ich mal mit dem OllyDebugger.

    int check_file() 
    { 
    
    string  path [] = {"c:\\test"}; 
    
    char alph[] = {'A','B','C'}; 
    
    for (int i=0;i<4;i++) // A bis c 
    { 
    
    ifstream datei( alph[i] + "\\test.txt " ); 
    
    cout<<alph[i]; 
    
            if (datei.good() ) 
            { 
                    cout<<"ok"<<endl; 
                    return 1; 
            } 
    
    } 
    
    return 0; 
    }
    


  • Was funktioniert sonst nicht?
    Das mit dem <4 ist auf jeden Fall falsch, du läufst ja über den gültigen Index raus! A, B, C => 0, 1, 2 => < 3



  • Ach geht doch net -.-

    Wenn ich jetzt z.b. auch noch Laufwerk 😨 überprüfen will:

    char alph[] = {'A','B','C','D'};
    

    Dann findet er die Datei auf Laufwerk C: nicht mehr 😡



  • Das müsstest du mal etwas genauer ausführe, was kriegst du für eine Ausgabe, etc..
    Was mir aber grade noch auffällt: dein ifstream Objekt öffnet ja die Datei, du schließt das Handle aber nicht mehr sauber (afaik wird das Handle im Konstruktor nicht geschlossen, weiß da jemand was dazu?), mach doch mal noch ein .close() rein.



  • Als Ausgabe bekomme ich halt nur meine Buchstaben aus dem Array:

    char alph[] = {'A','B','C'};

    Auch mit datei.close(); drin passiert das selbe 😞



  • blub² schrieb:

    Was mir aber grade noch auffällt: dein ifstream Objekt öffnet ja die Datei, du schließt das Handle aber nicht mehr sauber (afaik wird das Handle im Konstruktor nicht geschlossen, weiß da jemand was dazu?), mach doch mal noch ein .close() rein.

    fstream schrieb:

    /**
    * @brief The destructor closes the file first.
    */
    virtual
    ~basic_filebuf()
    { this->close(); }

    Anders wär's auch schlecht.

    Du kannst keine chars und Stringliterate zusammenfügen, was du machst ist wieder ungültige Pointeraddition.

    ifstream datei((string(1,alph[i])+":\\test.txt").c_str());
    


  • Nanyuki schrieb:

    blub² schrieb:

    Was mir aber grade noch auffällt: dein ifstream Objekt öffnet ja die Datei, du schließt das Handle aber nicht mehr sauber (afaik wird das Handle im Konstruktor nicht geschlossen, weiß da jemand was dazu?), mach doch mal noch ein .close() rein.

    fstream schrieb:

    /**
    * @brief The destructor closes the file first.
    */
    virtual
    ~basic_filebuf()
    { this->close(); }

    Anders wär's auch schlecht.

    Du kannst keine chars und Stringliterate zusammenfügen, also:

    ifstream datei(string(alph[i],1)+"\\test.txt ");
    

    Ah, danke dir. Stimmt, alles andere wäre blöd aber wer weiß ;).

    @check_fileq Ich dachte in deinem Array steht A,B,C,D?
    Aber dass das D nicht ausgegeben wird ist ja klar, wenn die Datei auf C:\ gefunden wurde springst du ja mit return 1 aus der Funktion raus -> D wird garnicht geprüft geschweige denn ausgegeben.



  • Ja das D nicht ausgeben wird wenn ich nur bis 3 Zähle ist schon klar aber darum ging es ja net ^^

    Aber wie kann ich jetzt auf den verschiedenen Laufwerken Überprüfen ob die Datei existiert ohne jedes mal z.b. zu schreiben:

    ifstream datei ( "a:\\test.txt" ); 
    ifstream datei2( "b:\\test.txt" ); 
    ifstream datei2( "c:\\test.txt" );
    

    Mir fällt nix mehr ein wie man das anders lösen könnte 😞



  • Du setzt dir den string einfach zusammen.

    http://www.cplusplus.com/reference/string/string/append/

    Oder was mit streams, falls du auch Zahlen reinschubsen musst.



  • Habs hinbekommen ty drakon 🙂

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main ()
    {
    
    char count[] = {'A','B','C','D'};
    
      for (int i=0;i<4;i++)
      {
    
      string str;
      string str2=":\\test.txt ";
    
      str.append<char>( 1 , count[i] ) ;
      str.append(str2);
    
      ifstream datei ( str.c_str()  );
    
      cout<<str << endl ;
    
            if (datei.good() )
            {
               cout<<"ok" << endl ;
            }
    
            else
            {
              cout<<"err" << endl ;
            }
    
      }
    
    system("PAUSE");
    return 0;
    }
    

Anmelden zum Antworten