In einer Dos-Shell nach einer Datei suchen



  • Willst du sie in mehreren Verzeichnissen suchen, oder nur wissen, ob sie in einem bestimmten Verzeichnis existiert.
    Bei Fall 2 reicht es zu versuchen die Datei für einen Stream zu öffnen.
    Für Fall 1 könnte man neben dem schon erwähnten FindFirst/FindNext (Windows) auch noch boost::filesystem nutzen (exists, directory-iterator).



  • Nee,

    ich brauch einfach nur nen boolschen rückgabewert einer funktion, wenn eine bestimmte Datei an einem bestimmten Ort vorhanden ist! Mehr muss das Ding garnicht können!



  • bool can_open_file(const std::string& filename)
    {
       std::ifstream filetest(filename.c_str());
       return filetest.is_open();
    }
    

    Die Funktion gibt false zurücke falls die Datei nicht existiert oder aus anderen Gründen nicht geöffnet werden kann (Zugriffsrechte, Lock etc.).



  • hmm

    irgendwie tut das nicht!

    bool uebergabe(char* ip, const string& file)
        {
    
            char pfad[200]={"ftp -v -s:s:\\SFM_technik\\testprojekt\\ftp.tmp "};
    
            strcat(pfad,ip);
    
            system(pfad);
    
            ifstream filetest(file.c_str());        
            return filetest.is_open();
        }
    

    Fehler:

    98 Z:\übergabe\Unbenannt1.cpp variable `std::ifstream filetest' has initializer but incomplete type



  • Hallo

    #include <fstream>
    using namespace std;
    

    bis bald
    akari



  • Den oberen Teil sollte man auch ändern

    string pfad = "ftp -v -s:s:\\SFM_technik\\testprojekt\\ftp.tmp";
    pfad += ip;
    system(pfad.c_str());
    


  • Hallo,

    also erstmal vielen Dank! Für den Zweck, der oben beschrieben wurde tut das einwandfrei! Geradezu erstklassig!

    Leider habe ich eine Änderung der Vorgaben erhalten:

    Es soll nun nicht mehr geprüft werden, ob eine Datei vorhanden ist, sondern ob eine bestimmte Zeichenkette vorhanden ist. Das würde jetzt zwar mit dem FIND Filter gehn, jedoch gibt der keinen Wert zurück!

    Eben darum geht es jetzt! Gibt es eine Modifikationsmöglichkeit von "IFSTREAM" der schaut, ob eine bestimmte Zeichenfolge in einer besimmten Datei vorhanden ist und mir einen boolschen Wert zurückgibt?

    SRY für die unannehmlichkeiten.
    Danke nochmals im vorraus!



  • Eine Zeichenkette in einer Datei oder eine Dateiname der eine Zeichenkette enthält?
    Für Ersteres mußt du die Datei nur einlesen (z.Bsp. in einen string) und dann darin nach der Zeichenkette suchen. Wie man sowas am effiezientesten mach hängt jetzt vom Aufbau und der Größe der Datei ab.
    Jedenfalls mußt du ifstream nicht modifizieren (was immer das sein soll):
    Ach so, lies dir das hier aus der FAQ mal durch
    Ströme und Dateien in C++



  • Hallo,

    Problem wurde folgendermaßen gelöst:

    int fehler(int wert)
    {
        fstream fehler("C:\\Temp\\fehler.tmp"); 
    
        if(wert==1)
        {
            if (fehler.is_open()) 
            { 
                char vergl[20]={"File status okay"};
    
                char pBuffer[20];
                fehler.seekg(366, ios::beg);
                fehler.read(pBuffer, 16); 
    
                for(int i=0; i<=strlen(vergl);)
                {
                    if(vergl[i]==pBuffer[i])
                    {
                        return (0);
                        i++;
                    }                
                    else
                    {
                        return (1);
                        break;
                    }            
                }    
    
            }
        }
    }
    

    beautiful Day



  • Schau da besser noch mal genau hin. Deine for-Schleife ist vollkommen sinnlos, da du hier nur das erste Zeichen vergleichst. Wenn es mit dem ersten Zeichen des Suchstrings übereinstimmt gehst du mit return 0 raus ansonsten mit return 1. Das break wie auch das i++ wird niemals ausgeführt. Dein Compiler sollte dir hier ein paar Warnungen geben.
    Verwende lieber string sowie string::find.


Anmelden zum Antworten