Ordner in String einlesen



  • 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