Pfad trennen



  • Hi guyz!

    ich habe einen öffnen dialog mit multiselect, eine Parametereingabe, in die man mehrere getrennt von simikoli pfade eingeben kann.

    Aber create file nimmt nur einen pfad. Wie kann ich die pfade trennen?

    ALso:

    c:\test1.txt;c:\test2.txt wird zu
    c:\test1.txt und c:\test2.txt

    aber genauso geht das:
    c:\test1.txt,test2.txt
    wie kann ich das trennen?

    Vielen Dank.



  • viel spaß... <vector> includen nicht vergessen 😉

    CString allepfade = "C:\\test1.txt;c:\\blabla.txt;d:\\mutti.dat";//usw...
    int pos = 0;
    vector<CString> vec;//da stehen denn die einzelnen pfade drin...
    for(int i = 0;;i++)
    {
    	CString teilstring = allepfade.Tokenize(";",pos);
    	if(teilstring == "") break;
    	 vec.push_back(teilstring);
    }
    
    //danach:
    //vec[0]  == C:\\test1.txt
    //vec[1]  == c:\\blabla.txt
    //vec[2]  == d:\\mutti.dat
    //...
    

  • Mod



  • Gibt es denn nicht eine möglichkeit, mit den shell path handling funcs?



  • geht das denn nicht ohne CString, also ich meine mit den reinen wchar.h-funktionen.

    Danke.



  • sry for dp/push

    aber ich habe jetzt was ausprobiert, dummerweise landet das in einer entlosschleife. Warum? ich kann da keinen Fehler entdecken.

    void Auto(LPWSTR lpPath)
    {
    	WCHAR path[MAX_PATH + 1];
    	lstrcpy(path, lpPath);
    
    	LPWSTR lpPtr = path;
    	while (lpPtr != NULL)
    	{
    		int nLength;
    		LPWSTR lpNextPtr = wcsstr(lpPtr, L";");
    
    		// wenn kein weiteres Vorkommen
    		if (lpNextPtr == NULL)
    		{
    			// no further ';', so get the whole string
    			nLength = lstrlen(lpPtr);
    
    			if (nLength == 0) // no string, nothing to do
    				break;
    		}
    		else
    		{
    			// the difference is the new string
    			nLength = (int)lpNextPtr + 1 /* the ';' char */ + (int)lpPtr;
    			if (nLength == 0) // go on
    			{
    				lpPtr = lpNextPtr;
    				continue;
    			}
    		}
    
    		// this is the single path
    		WCHAR single[MAX_PATH + 1];
    		wcsncpy(single, lpPtr, nLength);
    		single[nLength] = L'\0';
    
    		/* do whatever you want */
    
    		lpPtr = lpNextPtr;
    	}
    }
    

    Vielen Dank.


Anmelden zum Antworten