Prüfen auf welchem Laufwerk welche Datei ist



  • Hallo ich versuche mir gerade eine Funktion zu schreiben mit welcher ich nach einer Datei auf verschiedenen Laufwerken suchen kann.

    Hier ist meine Funktion:

    Aber er findet die Datei nicht was ist hier dran falsch ?

    Ok ich verwenden hier einen C Befehl mit drin aber kann das dass Problem sein ?

    BTW ifstream datei (drive.c_str() "\\test.txt "); das funktionierte leider nicht.

    Fehlermeldung:
    Erwartet }
    Auf der linken Struktur ist. oder. * erforderlich

    char alph[] = {'A','B','C'};
    char drive = 0x40; // A
    
    for (int i=0;i<3;i++) // A bis c
    {
    
    drive = drive + 0x1;
    cout<< drive <<endl;
    
    ifstream datei ("%s:\\test.txt ") , drive ;
    
            if (datei.good() )
            {
                    cout<<"ok"<<endl;
            }
    
            else
            {
                    cout<<"err"<<endl;
    
            }
    }
    


  • BTW ifstream datei (drive.c_str() "\\test.txt "); das funktionierte leider nicht.
    

    Damit würdest du auch Pointer addieren.
    #edit: Ich gehe davon aus das ein "+" dazwischen sein sollte.

    ifstream datei((drive + "\\test.txt ").c_str());
    

    Man müsste jetzt noch wissen in welcher Zeile die Fehlermeldung auftritt (und vermutlich müsste man auch noch mehr Code sehen).



  • 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