Frage zu GetNextPathName (jetzt zu CStringArray.add)



  • Hi zusammen ich will aus einem CFileDialog bei dem multiselect erlaubt ist die gewählten Dateinamen in ein CStringArray schreiben. Das klappt auch ganz gut, ich weiß nur nicht wie ich mein Abbruchkriterium für meine Schleife bekomm. Ich weiß nicht wieviele Namen selektiert wurden und ich weiß vorher nicht welches der letzt markierte ist.
    Also bisher mach ich das so:

    WavPath.m_ofn.lpstrTitle = "Zu berechnende Wavefiles:";
    		char *pBuffer;
    		pBuffer = WavPath.m_ofn.lpstrFile;
    		WavPath.m_ofn.nMaxFile = 1023; //maximale länge des Pfades
    		if(WavPath.DoModal() == IDCANCEL)
    			return;
    
    		POSITION Pos = WavPath.GetStartPosition();
    		while(bWorking)
    		{ 
    			DateiNamen.Add(WavPath.GetNextPathName(Pos));
    //jetzt muss ich irgendwann bWorking = FALSE machen, aber wann?
    		}
    

    Ich hoffe einer von euch weiß wie das geht.
    Vielen Dank schon im Voraus für jegliche Bemühung. 🙂



  • while(Pos != NULL) ?



  • 😃 👍
    Vilen lieben Dank Isbeau! So macht man das!



  • Das war was ich gesucht hab, doch jetzt hab ich erst gemerkt dass da noch mehr nicht geht!
    Wieso klappt mein add in mein CStringarray nicht?

    while(Pos!=NULL)
    		{ 
    			Temp = _T(WavPath.GetNextPathName(Pos));//Temp ist CString
    			// und Funktion gibt das auch zurück
    			DateiNamen.Add(Temp);//hier kommt ein Assert
    			AnzahlFiles++;
    		}
    

    Das Assert das kommt sieht so aus:

    // check to make sure the VTable pointer is valid
    	ASSERT(sizeof(CObject) == sizeof(void*));
    	if (!AfxIsValidAddress(*(void**)pOb, sizeof(void*), FALSE))
    	{
    		TRACE0("ASSERT_VALID fails with illegal vtable pointer.\n");
    		if (AfxAssertFailedLine(lpszFileName, nLine))
    			AfxDebugBreak();
    		return;     // quick escape
    	}
    

    Kann mir nochmal jemand helfen?



  • HÄÄÄÄÄÄÄÄÄ? 😕

    void CWavealyzeView::OnButton1() 
    {
    	BOOL bWorking = FALSE;
    	CString Pfad ="";
    	CString messages = "";
    	CString XLSFile = "";
    	//deklarier ich mein Array hier geht es nicht !!!!!!!!!!!!!!!!!!!!!!!!!!!
    	CFileFind itsFile;
    	CString Extensions = "ExportToExcel (*.xls)|*.xls|ExportToCsv (*.csv)|*.csv||";
    	CFileDialog ExportTO(FALSE,"xls","",OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_EXTENSIONDIFFERENT,Extensions,NULL);
    	CFileDialog WavPath(TRUE,"wav","",OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_ALLOWMULTISELECT,"Wave (*.wav)|*.wav||",NULL);
    	CExtendedExcel extendedXls;
    	DWORD dwAnfang = 0;
    	DWORD dwEnde = 0;
    	long AnzahlFiles = 0;
    	long passedTests = 0;
    	// SpeichernDialog in hier eingetragenes File kommen die Werte
    	ExportTO.m_ofn.lpstrTitle = "Berechnungen Exportieren nach:";
    	if(ExportTO.DoModal() == IDCANCEL)
    		return;//wenn Cancel gedrückt wird abbrechen
    
    	XLSFile = ExportTO.GetPathName();//Zuweisung des Pfades an Lokale Variable
    	ExportTO.DestroyWindow();//Fenster wieder ordentlich wegräumen
    	CWaitCursor csr;//SandUhr als Mauszeiger
    
    	CStringArray Dateien; //HIER GEHT ES!!!!!   WIESO?????
    	//Wenn das File nicht bereits an der Stelle besteht!
    	if(!itsFile.FindFile(XLSFile))
    	{
    		Dateien.Add("NJNB");
    		WavPath.m_ofn.lpstrTitle = "Zu berechnende Wavefiles:";
    		char *pBuffer;
    		pBuffer = WavPath.m_ofn.lpstrFile;
    		WavPath.m_ofn.nMaxFile = 1023; //maximale länge des Pfades
    		if(WavPath.DoModal() == IDCANCEL)
    			return;
    
    		POSITION Pos = WavPath.GetStartPosition();
    		AnzahlFiles = 0;
    		bWorking = 1;
    		CString Temp = "";
    		while(Pos!=NULL)
    		{ 
    			Temp = _T(WavPath.GetNextPathName(Pos));
    			Dateien.Add("Temp");
    			AnzahlFiles++;
    		}
    	}
    	else
    	{
    		AfxMessageBox("Überschreiben von bestehenden Dateien wird nicht Unterstützt!",MB_ICONSTOP,0);
    		itsFile.Close();
    		return;
    	}
    	itsFile.Close();
    

Anmelden zum Antworten