CString Problem
-
hallo zusammen!
habe ein riesen ärgert mit strings komischerweise. weiß auch net was das soll. liegt das an visual studio 2008? Code:
wcout << gegeben.GetString() << "\n"; //funktioniert, weil das schon gegeben ist const CString temp; temp.SetString("test.txt"); //geht leider nicht. warum? kriege fehler wcout << temp.GetString() << "\n"; Code: wcout << gegeben.GetString() << "\n"; //funktioniert, weil das schon gegeben ist const CString temp; temp.SetString("test.txt"); //geht leider nicht. warum? kriege fehler wcout << temp.GetString() << "\n"; Code: wcout << gegeben.GetString() << "\n"; //funktioniert, weil das schon gegeben ist CString temp; temp.SetString("test.txt"); //geht leider nicht. warum? kriege fehler wcout << temp.GetString() << "\n";
ziel ist es, die copyfile funktion zu benutzen, die als übergabeparameter einen cstring will. benutze visual studio 2008.
fehler vom compiler:
error C2664: 'void ATL::CSimpleStringT<BaseType,t_bMFCDLL>::SetString(const wchar_t *)': Konvertierung des Parameters 1 von 'const char [7]' in 'const wchar_t *' nicht möglichLG
-
der code oben ist falsch!
kopieren ist schwer...
nochmal:
wcout << gegeben.GetString() << "\n"; //funktioniert, weil das schon gegeben ist CString temp; temp.SetString("test.txt"); //geht leider nicht. warum? kriege fehler wcout << temp.GetString() << "\n";
-
lösung gefunden:
einfach ein _T(temp.SetString("test.txt"));
machen!
also das _T scheint zu gehen. warum weiß ich nicht.
jetzt will ich aber natürlich (nach erfolgreichem test) das net hardcoden. es soll ein anderer ordner jetzt dran gehängt werden! also folgendes:
CString temp; temp = strFileName; nPosSlash = strFileName.ReverseFind('\\'); temp = temp.TrimRight(nPosSlash); //Hier passiert nichts... :( CString neuFile; neuFile.SetString(_T("C:\\TEMP\\")); neuFile.Append(temp);
was will ich machen: ich will den dateinamen aus dem pfad haben! in temp soll am ende nur der dateiname stehen! leider funktioniert es noch nicht (siehe comment).
danke!!
-
Bertram schrieb:
temp.SetString("test.txt"); //geht leider nicht. warum? kriege fehler
[/code]Geht nicht, weil dein Programm ein Unicode-Projekt ist und du einen Nicht-Unicode-String übergeben willst. Die Lösung wäre L"test.txt" oder eben _T("test.txt") (dieses Makro setzt an die Stelle entweder "test.txt" oder L"test.txt", je nachdem ob _UNICODE definiert ist).
-
Bertram schrieb:
machen!
also das _T scheint zu gehen. warum weiß ich nicht.
Wie wäre es mit etwas Studium von Dokumentation und lernen der Basics. Insbesondere der Unterschiede zwischen MBCS+UNICODE!
Bertram schrieb:
CString temp; temp = strFileName; nPosSlash = strFileName.ReverseFind('\\'); temp = temp.TrimRight(nPosSlash); //Hier passiert nichts... :( CString neuFile; neuFile.SetString(_T("C:\\TEMP\\")); neuFile.Append(temp);
was will ich machen: ich will den dateinamen aus dem pfad haben! in temp soll am ende nur der dateiname stehen! leider funktioniert es noch nicht (siehe comment).
Auch hier eignetsich die Doku wunderbar zum Beheben von Irrtümern:
http://msdn.microsoft.com/en-us/library/fy06s064(VS.80).aspx
CStringT::TrimRight
Trims trailing characters from the stringTrimRight nimmt keine Position als Argument sondern ein Zeichen.
PTSTR *pszName = ::PathFindFileName(strFileName.GetBuffer(0)); if (pszName) *pszName = 0; strFileName.RealeaseBuffer();
-
leider kennt er die funktion PathFindFileName nicht
fehlt mir etwas??
noch kurze frage: wo steht bei deinem code dann der dateiname drin? in meiner strFileName?? das wär nämlich cool, weil die muss ich ja noch verwenden...
lg
-
Doku sagt: shlwapi.h einbinden!
-
hatte ich schon versuch.
kriege ich folgenden fehler:error C2663: 'ATL::CSimpleStringT<BaseType>::GetBuffer': für 2 Überladung(en) gibt es keine zulässige Konvertierung für den this-Zeiger
-
mal ganz doof gefragt:
gibt es nicht ne andere methode den dateinamen raus zu kriegen?
bei mir scheint es mit dem PathFindFileName nicht zu funktionieren.
liegt vielleicht auch daran, dass vs2008 extrem kompliziert geworden ist. durch den vs6 code konnte ich noch durchblicken. 7.1 ging auch noch aber vs 2008 ist total blöde geworden. die hälfte der beispiele ausm netz gehen nicht mehr.unfassbar wie lange ich mit vs2008 als hobby programmierer basteln muss um nen dateinamen aus nem string zu kriegen. da hat ms (finde ich) einen rückschritt gemacht.
-
Mein Code funktioniert.
Nur scheinst Du mit den "Grundlagen" Schwierigkeiten zu haben und nicht mit "dateinamen aus nem string zu kriegen"
-
Bertram schrieb:
mal ganz doof gefragt:
gibt es nicht ne andere methode den dateinamen raus zu kriegen?
bei mir scheint es mit dem PathFindFileName nicht zu funktionieren.
liegt vielleicht auch daran, dass vs2008 extrem kompliziert geworden ist. durch den vs6 code konnte ich noch durchblicken. 7.1 ging auch noch aber vs 2008 ist total blöde geworden. die hälfte der beispiele ausm netz gehen nicht mehr.unfassbar wie lange ich mit vs2008 als hobby programmierer basteln muss um nen dateinamen aus nem string zu kriegen. da hat ms (finde ich) einen rückschritt gemacht.
An der Funktion hat sich sicher nix geändert, und CString gab's auch schon zu VS6-Zeiten. Außerdem funktionieren Beispiele, die solche Geschichten behandeln, eigentlich immer. Das hat ja nix mit der Struktur der IDE zu tun...
-
Bertram schrieb:
mal ganz doof gefragt:
gibt es nicht ne andere methode den dateinamen raus zu kriegen?
CString fp = _T("c:\\fpath\\fname.txt"); CString fn = fp.Mid( fp.ReverseFind( _T('\\') ) + 1 );
-
danke!! ich probier das sofort mal aus.
@martin richter: naja bei dem code von dir krieg ich halt die o.g. fehlermeldung. weiß auch nicht was das problem ist...
lg