Problem mit Deiteinamenlänge



  • Wenn der String den gleichen Dateinamen enthält, muss es gehen. Es muss also einen Unterschied geben. Zeig doch mal etwas mehr Code.



  • mach mal testweise bitte:

    assert (variable == "Dateiname.txt");
    

    direkt vor den Code, den du gepostet hast. (<cassert> einbinden).

    edit: scheiß copy&paste. Danke Braunstein



  • Mach das besser ohne c_str() sonst werden hier nur Pointer verglichen (oder war das die Absicht?).



  • Also mit assert wird das Programm abgebrochen!
    Muss also doch einen Unterschied geben. Nur komisch, dass es bei einem kürzeren Dateinamen genau so wie ichs jetzt habe klappt?!

    Hier mal mein Code:

    bool search(const string& file_name)
    {
    
        string file_intern("Abc-Abc");
        file_intern += file_name;
        file_intern += ".dat";
    
        assert (file_intern.c_str() == "Abc-Abc01234567890abcdefghijklmnopqrstuvwxyz.dat"); 
        ifstream file_stream(file_intern.c_str(), ios::in);
    
        if (!file_stream)
            return false;
    
        cout << "blablabla";
        return true;
    }
    
    int main()
    {
        ifstream file_stream("Auslesen.txt", ios::in);
        if (!file_stream)
            return -1;
    
        string input;
        while (file_stream.eof() == false)
        {
            for (unsigned short x = 0; (x < 3 && file_stream.eof() == false); ++x)
            {
                file_stream >> input;
                if (x == 0)
                   search(input);
            }
        }
        system("PAUSE");
    }
    

    Auslesen.txt sieht folgendermaßen aus:

    01234567890abcdefghijklmnopqrstuvwxyz 12:00 11.06.2007
    abcdefghijklmnopqrstuvwxyz01234567890 13:00 12.06.2007
    


  • Die Assertion ohne .c_str( )!

    greetz, Swordfish



  • Sorry hat ich übersehen!
    Gehen tuts so oder so nicht 😞



  • sagte ich doch. 🙂



  • und woran liegts?! 🙄



  • OK, habe deinen Code kopiert (paar includes zugebaut), mir die Datei Auslesen.txt erstellt mit dem Inhalt

    01234567890abcdefghijklmnopqrstuvwxyz 12:00 11.06.2007
    abcdefghijklmnopqrstuvwxyz01234567890 13:00 12.06.2007
    

    und die Datei Abc-Abc01234567890abcdefghijklmnopqrstuvwxyz.dat einfach leer.

    Wunderbar, "search" wird aufgerufen, ich komme durch die Assertion, er öffnet die Datei, der Stream ist OK (ich fliege also nicht vorzeitig raus).
    Dann kommt der zweite Aufruf von "search" mit "abcdefghijklmnopqrstuvwxyz01234567890". Da fliege ich natürlich dann bei der Assertion raus, weil der Name ja diesmal ein anderer ist.

    Also alles, wie erwartet. Bei mir läuft dein Code.



  • bool search(const std::string& file_name)
    {
        std::string file_intern("Abc-Abc");
        file_intern += file_name;
        file_intern += ".dat";
    
        std::ifstream file_stream(file_intern.c_str(), std::ios::in);
        return (!file_stream ? false : true);
    }
    
    int main()
    {
        std::ifstream file_stream("Auslesen.txt", std::ios::in);
        if (!file_stream)
            return -1;
    
        std::string input;
        while (std::getline(file_stream, input))
            if (search(input.substr(input.find_first_of(' '))) == false)
                std::cerr << "Zeile: " << input << std::endl;
    }
    

    🙂



  • return (!file_stream ? false : true);
    

    rofl mao



  • hallo xr800,

    wie wird der Dateistring denn erzeugt/geschrieben? vielleicht schwirrt ja am Ende noch so ein hässliches line feed / cariage return rum? Gib deshalb mal in deinem Programm den zuvor eingelesenen Dateinamen HEXADEZIMAL aus. Siehst du da irgendwo sowas wie 0A oder 0D?

    von Ney


Anmelden zum Antworten