Dateinamen aus Verzeichnis auslesen



  • Danke!

    Für alle Interessierten:

    Hab daraufhin folgendes gefunden:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39396.html



  • Hallo,

    ist zwar schon ein sehr alter Thread, aber ich beleb den jetzt mal wieder 😉

    Wollte fragen ob Du für Dein Problem eine Lösung gefunden hast. Ich suche nämlich seit einiger Zeit auch einen Weg für ein ähnliches Problem. Wenn Du einen Weg gefunden hast, könntest Du mir vielleicht Deinen kompletten Code per E-Mail schicken oder hier posten? Wäre wirklich super!!!!

    Oder wenn das jemand anderes in der Zwischenzeit gemacht hat.... würde mich sehr freuen!

    Danke schon mal allen im Voraus!

    Viele Grüße
    Mufasa 🙂



  • Ich hab letztens was ähnliches gemacht

    CString CT6963CDlg::LoadPath(void)
    {
    	BROWSEINFO bi;
    	CString pfad;
    
    	memset(&bi, 0, sizeof(BROWSEINFO));
    	bi.hwndOwner = AfxGetMainWnd()->GetSafeHwnd();
    	bi.lpszTitle = _T("Bitte wählen Sie ein Verzeichnis...");
    	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
    
    	ITEMIDLIST* pList = SHBrowseForFolder( &bi );
    	if(pList)
    	{
    		wchar_t szFolder[MAX_PATH+1]=_T("");
    		if(SHGetPathFromIDList(pList, szFolder)) 
    		pfad = szFolder;
    
    		LPMALLOC pMalloc=NULL;
    		if(S_OK == SHGetMalloc(&pMalloc))
    		{
    			pMalloc->Free(pList);
    			pMalloc->Release();
    		}
    	}
    	CoUninitialize();
    
    	return pfad;
    }
    
    void CT6963CDlg::LoadFiles(CString pfad)
    {
    	UpdateData(true);
    
    	CFileFind cFFind;
    	CString cExtend;
    	BOOL bWorking = TRUE;
    	BOOL bFind = FALSE;
    	int j = 0;
    	CString newPfad;
    
    	cExtend.Format(_T("%s\\%s"), pfad, _T("*.bmp"));
    	bFind = cFFind.FindFile(cExtend, NULL);
    
    		if(pfad.GetLength() > 1)
    		{
    			while(bWorking)
    			{
    				bWorking = cFFind.FindNextFile();
    				sImages[j].Format(_T("%s\\%s"), pfad, cFFind.GetFileName()); //sImages[] ist Global als CString
    				j++;
    			}
    		}
    		if(pfad.GetLength() <= 0)
    			MessageBox(_T("Kein Verzichnis angegeben.\nBitte geben Sie ein Verzeichnis an."),_T("Fehler: Kein Verzeichnis"),NULL);
    
    		iMaxPic = j;
    	UpdateData(false);
    }
    


  • Uruk-h4j schrieb:

    ...
    //sImages[] ist Global als CString
    ...

    dazu sag ich jetzt einfach mal nichts - oh man
    und die funktionen noch nicht ein mal so gehalten das man es wiederverwenden kann - doppel oh man



  • Kommt jetzt wieder die Grundsatzdebatte "Globale Variablen"?
    Ich wiß auch dass man den Code wie ich ihn hier gepostet hab nicht so einfach doppelt verwenden kann. Hab ihn aus einem älteren Prog kopiert, wo es mir ehrlich recht egal war ob ich ihn nochmal brauchen kann. Und die erste Funktion kann man meines erachtens 1:1 kopieren und sie funzt. Aber wenigstens kam von mir mehr als nur "oh mann"....



  • Uruk-h4j schrieb:

    void CT6963CDlg::LoadFiles(CString pfad)
    {
       ...
    }
    

    Schon mal was von const reference gehört?

    P.S.: Oh, Mann..... 😃



  • jencas schrieb:

    Uruk-h4j schrieb:

    void CT6963CDlg::LoadFiles(CString pfad)
    {
       ...
    }
    

    Schon mal was von const reference gehört?

    P.S.: Oh, Mann..... 😃

    Schon mal was von Ref counting gehört?



  • Leute Leute was geht denn hier ab?!?

    Ich wollte ja nicht gleich einen Programierer-Glaubenskrieg auslösen 🙂

    Auf jeden Fall danke für den Code, werde versuche das morgen mal zu probieren.

    Melde mich dann wieder wenn ich was hab 😉



  • Also irgendwie komm ich mit Deinem Code doch nicht so ganz zurecht.... muss ich jetzt mal leider sagen....

    Und Du machst da ja auch sehr viel anderes Zeugs.... (das ist auch nicht so ganz verstehe leider - noch nicht!)

    Aber nur ein einziges Verzeichnis auslesen und die Dateinamen anzeigen ist doch nicht soooo viel, oder?!?

    Ich häng da leider noch immer sehr in der Luft...... 😞



  • Hab mal das "unwichtige" rausgenommen, die Wariablen klarer Bennant und alles kommentiert. Hoffe jetzt kannst du damit mehr anfangen 😉

    void CProjRenameDlg::OnBnClickedSearch()
    {
    	m_cList.ResetContent(); //Leeren der Liste (m_cList);
    
    	CString pfad; /*Pfad incl. c:\\ */
    	CString dateien; //Die Dateiendung   "*.jpg" z.B.
    
    	CFileFind cFFind; 
    
    	BOOL bWorking = TRUE; // Gibts noch Datein im Verzeichnis?
    	BOOL bFind = FALSE; //Ist das Verzeichnis existend?
    
    	dateien.Format(_T("%s\\%s"), pfad ,_T("*.txt"));
    	bFind = cFFind.FindFile(dateien); 
    
    	if(bFind == FALSE)
    		MessageBox(_T("Keine Dateien mit diesem Format gefunden.\nBitte ein anderes Format wählen."),_T("Fehler: Keine Dateien"),NULL);
    
    	else
    	{
    		if(pfad.GetLength() > 0) //Pfadlänge größer 0?
    		{
    			while(bWorking) //Suche solange, bis bWorking = FALSE
    			{
    				bWorking = cFFind.FindNextFile(); //Gibts noch weitere Datein? Wenn nein, dann FALSE
    				m_cList.AddString((LPCTSTR) cFFind.GetFileName()); // Dateinamen in eine CtrlList eintragen (m_cList)
    			}
    		}
    	}
    	UpdateData(FALSE);
    }
    

Anmelden zum Antworten