Dateipfade auslesen und in Listbox schreiben



  • Hallo,
    Ich habe ein Programm geschrieben, mit dem man durch einen Button mit dem Standard-Öffnen-Fenster mehrere Dateien auf einmal auswählen kann. Das Programm schreibt dann die Pfade der ausgewählten Dateien untereinander in eine Listbox.

    Wenn es wenige Dateien sind funktioniert es problemlos. Doch wenn ich viele Dateien auswähle bricht das Programm das Öffnen ab.

    Wenn die Dateien direkt in C:\ liegen kann man mehr Dateien auswählen, als wenn man eine sehr lange Ordnerstruktur hat.
    Ich möchte aber immer beliebig viele Dateien auswählen können.

    An was kann das liegen?
    Ich weiß nicht wo ich den Fehler suchen soll.

    Gruß,
    Dan_X

    Hier der Code für den ÖffnenButton:

    void CProgrammDlg::OnOeffnen() 
    {
    	CListBox *listzeiger;	//Listenzeiger definieren
    
    	POSITION  position;
    
    	CString next_path;	
    
    	CFileDialog	file_dlg(TRUE);	       //für Öffnen-Dialog
    
    	listzeiger=( CListBox* )GetDlgItem( IDC_LISTE );  //zeigt auf Listbox
    
    	file_dlg.m_ofn.Flags|=OFN_ALLOWMULTISELECT; //Mehrfachauswahl zulassen
    
    	listzeiger->ResetContent();		   //Listbox leeren
    
    	int result = file_dlg.DoModal();
    
    	if (result==IDOK)      //Wenn Ok-Button im Dialogfenster gedrückt wurde
    	{	
    	     position=file_dlg.GetStartPosition();	//Position Erster File
    
    	     while (position!=0)			
    	     {	
    		next_path=file_dlg.GetNextPathName(position ); //Pfad holen
    
    		listzeiger->AddString(next_path);    //Pfade in Liste schreiben
    	     }
    	}
    	else
    	 MessageBox ("Öffnen wurde abgebrochen", "Fehler", MB_ICONERROR ) ; //Errorfenster bei Abbrechen des Öffnen-Dialogs
    
    }
    


  • das liegt daran das bei dir der nMaxFile & lpstrFile vom CFileDialog nicht groß genug nMaxFile gibt die länge des strings an die ausgeschnitten wird wenn die zu klein ist wird dir der text aus dem CFileDialog abgeschnitten. vor allem eben bei Multiselect

    erweiter sie wie folgt bevor der dialog geöffnet wird

    DWORD MAXFILE = 2048; //Gib im die größe die du brauchst evtl mehr als 2048
    
    pBuffer 	= new TCHAR[MAXFILE];//Neue puffergröße erstellen
    *pBuffer 	= 0;
    
    file_dlg.m_ofn.nMaxFile	= MAXFILE;//Länge des auszuschneidenden textes
    file_dlg.m_ofn.lpstrFile	= pBuffer;//Puffer an CFileDialog übergeben
    


  • Ehe einer fragt es ist ein -> TCHAR 😃

    TCHAR *pBuffer     = new TCHAR[MAXFILE];//Neue puffergröße erstellen
    


  • LOL 😃 jo 👍



  • Frei nach dem Forenmotto.

    "Irgendwer hat immer was zu nörgeln..."



  • Danke erstmal.
    Aber wenn ich das mache kommen noch einige Fehler.
    Er kennt kein pBuffer. (undeclared identifier) Muss ich den irgendwo definieren?

    Gruß,
    Dan_X



  • SOrry für die Frage habs grad gesehen.



  • Es funktioniert.
    Vielen Dank für die Hilfe.
    Gruß,
    Dan_X



  • Also mal ganz ehrlich...da kann man wirklich selbst drauf kommen
    wenn da schon

    = new TCHAR
    

    steht, was soll dann wohl anderes
    als ein TCHAR erzeugt werden?

    Das sind die Basics und die fehlen dir ganz offenbar. Leg dir ein gutes
    Buch zu um die Lücken zumindest teilweise zu schließen. Die Dummie-Reihe
    ist dafür nicht schlecht. :xmas1:


Log in to reply