Ordner in String einlesen





  • glaube, glaube, Fahrradkette.

    Lass Dir halt die gefundenen Dateinamen mal ausgeben. Vermutlich findest Du dann auch sowas wie . und ..

    Auf jeden Fall kannst Du doch prüfen, ob mehr Dateien gefunden werden, und zwar nicht, indem Du einfach Deinen alten Trott ablaufen lässt, und bei Fehlern anfängst rumzuraten.

    Beginne damit, alle gefundenen Dateinamen auf die Konsole oder sonstwohin auszugeben. Wenn das klappt/nicht klappt, gehts entsprechend weiter.

    Immer schön kleine Schritte machen ...



  • Das Problem ist, wie ich bereits verlinkt habe, dass open bei geöffneter Datei fehlschlägt. Rufe also davor close auf, um die vorherige Datei zu schließen, oder instanziere die fstream-Klasse in der Schleife.



  • Ja da steht auch nicht mehr drin. Ich hab schon viel nach solchen gesucht aber das ist ja ein sehr spezieller Fall. Ich glaube das Problem an meinem Code liegt im öffnen der nächsten Datei. Sieht irgendjemand den Fehler?



  • Wenn du also nicht open aufrufst, während das fstream-Objekt bereits eine Datei geöffnet hält, lass die die Dateien wie bereits geschrieben aufzählen.



  • 🙄 oje...



  • Das Problem liegt an:

    The_Scorpion schrieb:

    Ich glaube ...

    Du kannst doch im Zweifel nach jeder Aktion testen, ob sie erfolgreich war ... jedenfalls besser als wir hier, die nicht mal genau wissen, was Du konkret machst ...



  • ok erstmal vielen Dank für die Tipps. Das hat mir sehr viel weitergeholfen. Ich bin mitlerweile soweit, dass ich mit jede einzelne Datei anzeigen kann ohne Probleme("." und ".." sortiere ich automatisch aus). Die Frage ist jetzt nur wie kann ich aus der gefundenen Datei streamen. Ich suche schon die ganze Zeit nach einer Reference. Habe aber noch nix gefunden.

    Vielen Dank im Voraus!



  • So wie du es bereits gemacht hast.



  • Das ist jetzt mein Code.

    HANDLE fHandle;
        WIN32_FIND_DATA wfd;
    
    	fHandle=FindFirstFile("F:\\SichereDaten\\*",&wfd);
        ifstream input;
    	ofstream output;
    	do
    	{
        	if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
        	{
            	if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            	{
                MessageBox(0,wfd.cFileName,"Folgendes Verzeichnis wurde gefunden:",0);
    			}
            	else
            	{
                	MessageBox(0,wfd.cFileName,"Folgende Datei gefunden:",0);
    
    				input.close();
    				output.close();
    				input.open(wfd.cFileName,ios::binary|ios::in);
    				output.open("F:\\out.txt",ios_base::out|ios::app);
    
    				unsigned int keyPos = 0;
    				if(input.is_open()){
    					if(output.is_open()){
    						char character;
    						while((character = input.get()) != -1){
    							cout << "\rEncrypting character ASCII " << (int) character << " using key[x]" << pass[keyPos] << "..... ";
    							character ^= pass[keyPos];
    							cout << character << endl;
    							output << character;
    							keyPos++; if(keyPos == pass.length()) keyPos = 0;
    						}
    					cout << endl << "done" << endl;
    					input.close();
    					output.close();
    					}
    					else{
    						cerr << "ERROR: Output could not be opened." << endl;
    					}
    				}
    				else{
    					cerr << "ERROR: Input could not be opened." << endl;
    				}
            	}
        	}
    	}
    	while (FindNextFile(fHandle,&wfd));
    	FindClose(fHandle);
    

    Mit der ersten Datei passiert alles nach Plan. Die zweite wird auch gefunden, allerdings kann sie scheinbar nicht geöffnet werden denn ich bekomme als Ausgabe meinen Error: Input could not be opened. Ich habe schon die ganze Zeit versucht den Fehler zu finden auch mit dem C++ Debugger aber da ich darin scheinbar noch nicht so gut bin habe ich auch nichts gefunden. Habt ihr noch ne Idee?
    Vielen Dank im Voraus für jede Hilfe!



  • Verleg die Definition der Stream-Variablen mal dahin, wo sie hingehört:

    HANDLE fHandle;
        WIN32_FIND_DATA wfd;
    
        fHandle=FindFirstFile("F:\\SichereDaten\\*",&wfd);
    
        do
        {
            if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
            {
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                MessageBox(0,wfd.cFileName,"Folgendes Verzeichnis wurde gefunden:",0);
                }
                else
                {
                    MessageBox(0,wfd.cFileName,"Folgende Datei gefunden:",0);
    
                    ifstream input;
                    ofstream output;
    
                    input.open(wfd.cFileName,ios::binary|ios::in);
                    output.open("F:\\out.txt",ios_base::out|ios::app);
    
                    unsigned int keyPos = 0;
                    if(input.is_open()){
                        if(output.is_open()){
                            char character;
                            while((character = input.get()) != -1){
                                cout << "\rEncrypting character ASCII " << (int) character << " using key[x]" << pass[keyPos] << "..... ";
                                character ^= pass[keyPos];
                                cout << character << endl;
                                output << character;
                                keyPos++; if(keyPos == pass.length()) keyPos = 0;
                            }
                        cout << endl << "done" << endl;
                        }
                        else{
                            cerr << "ERROR: Output could not be opened." << endl;
                        }
                    }
                    else{
                        cerr << "ERROR: Input could not be opened." << endl;
                    }
                }
            }
        }
        while (FindNextFile(fHandle,&wfd));
        FindClose(fHandle);
    


  • Danke aber da ändert sich rein garnix 😞



  • Habs getestet. Bei mir lässt sich auch die erste gefundene input-Datei nicht öffnen, das liegt bei mir daran, dass meine exe-Datei in einem anderen Verzeichnis als F:\SichereDaten liegt.

    Probier mal:

    ...
    #include <string>
    ...
    
        WIN32_FIND_DATA wfd;
    
        string ordner("f:\\SichereDaten");
    
        fHandle=FindFirstFile((ordner + "\\*").c_str(),&wfd);
    
    ...
    
        input.open((ordner + "\\" + wfd.cFileName).c_str(),ios::binary|ios::in);
    
    ...
    

    Damit läufts bei mir.



  • Super! Läuft jetzt auch bei mir! Vielen, vielen Dank!


Anmelden zum Antworten