Open File Dialog mit doppeltem backslash
-
also ich hab ne Headerdatei angelegt, in der hab ich copyPath und quellPath public angelegt. Das müsste doch passen oda?
Ich steh grad irgendwie auf dem Schlauch
wenn ich copyPath und quellPath als TCHAR deklariere in der Header mekert er bei der SHFileOperation. Wenn ich als LPTSTR deklariere mekert er zwar nicht, aber funktioniert auch nicht. Was mach ich jetzt falsch? Warscheinlich ein großer Fehler bei den Variablen.
Gruß
-
FlorianB schrieb:
also ich hab ne Headerdatei angelegt, in der hab ich copyPath und quellPath public angelegt. Das müsste doch passen oda?
Nein! Du deklarierst doch dort lokale Variablen. Wenn du ein lokales quellPath anlegst, schreibst du auch da rein und nicht in deine Globale. Lösche die lokalen Deklarationen und schaue, was passiert.
-
so ich bin schon weiter gekommen.
hab jetzt in die headerdatei folgendes eingetragen:
TCHAR quellPath[MAX_PATH];
TCHAR copyPath[MAX_PATH];funktioniert auch wunderbar so. also das Pfad einlesen über den Open File Dialog.
das Kopieren findet leider nicht statt.
wenn ich durchdebugge, ist bei vollgender Codezeile ein falscher Wert:
int n = SHFileOperation(&sf);n hat hier den Wert 1148. Aber warum?
Wenn ich es durchlaufen lass mit Lokalen Variabeln, funktioniert es nur wenn ich doppelte Backslash eintrag. Dann hat n den Wert 0 und kopiert.
Wenn ich es mit normalem Pfad durchlaufen lass, als mit einfachen Backslash, dann hat n den Wert 1026 und es wir nicht kopiert.Was mach ich jetzt noch falsch?
Durch das debuggen hab ich einiges interessantes rausgefunden
gruß
-
Hast Du mal die Doku zu SHFileOperation gelesen? Speziell wie der Pfad auifgebaut sein MUSS? Da reicht *nicht* eine \0 am Ende!
-
hey,
hab mir alles nocheinmal durchgelesen.
der Pfad muss doch so aussehen oda?:// RIGHT LPTSTR pszSource = L"C:\\Windows\\*\0";
Gruß
-
richtig oder falsch?
-
kann mir keiner Helfen?
MfG
-
Ich würde es so schreiben:
LPCTSTR pszSource = _T("C:\\Windows\\*\0\0");
-
hey,
ok hmm.
Bei dem Pfad muss ich jetzt aber doppelte \\ angeben, Dann funktioniert der Kopiervorgang.
Nur wie mach ich das jetzt mit dme OpenFileDialog-Pfad?
Mit dem funktioniert es nämlich nicht. Es wird nichts kopiert.
Gruß
-
hey,
hab nach langem googeln was zu dem Thema gefunden.
http://www.c-plusplus.net/forum/39295nur handelt es sich hierbei um einen AnsiString.
Hat der TCHAR die gleichen Eigenschaften?
Weil dann müsste die Funktion ja funktionieren.
Gruß
-
Mein Eindruck, Du programmierst nicht, sondern stocherst rum.
Ist Dir schon mal in den Sinn gekommen, Dir die Grundlagen anzueignen.
Dazu gehört das Wissen um Datentypen, Zeichensätze allgemein.Windows Datentypen
http://msdn.microsoft.com/en-us/library/aa383751%28v=VS.85%29.aspx
Zeichensätze
http://msdn.microsoft.com/de-de/library/06b9yaeb.aspxZeichenketten und MFC:
http://msdn.microsoft.com/de-de/library/kda99ffc.aspxKonvertierungen von Zeichenketten
How to: Convert Between Various String Types
http://msdn.microsoft.com/de-de/library/ms235631.aspxZu TCHAR
http://www.codeproject.com/Tips/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etcAnsonsten in der MSDN steht alles was Du zur Programmierung von Windows mit MFC wissen mußt.
Voraussetzung: Lesen!
-
hey,
ich bin noch ein Anfänger und kein Experte.
Hab mir die Links lange durchgelesen.
Mit den MSDN einträgen kann ich irgedwie nicht so viel anfangen.kann mir mal jemand zeigen, wie er es machen würde, wenn der Pfad über einen open file dialog eingelesen wird und dann in der SHFileOperation verwendet wird?
hab jetzt nochmal ein bisschen rumprobiert es aba ned nicht hinbekommen
das mit den doppelten Backslash hab ich jetzt auch kapiert.
Gruß
-
Hey Leute,
keiner ne Ahnung?
Gruß
-
Brauch man aber doch trotzdem nicht, oder?
-
Hey,
habs inzwischen hinbekommen!
es war lediglich der falsche Variablentypfür alle die das gleiche oder änliche Probelm haben:
CString quellPathC(quellPath); //Umwandlung von TCHAR in CString quellPathC.Append(L"\\*.*"); CString copyPathC(copyPath); quellPathC.AppendChar('\0'); copyPathC.AppendChar('\0'); SHFILEOPSTRUCT sf; memset(&sf,0,sizeof(sf)); sf.hwnd = NULL; sf.wFunc = FO_COPY; sf.pFrom = quellPathC.GetBuffer(); //quellPath Pfad von Dateiordner sf.pTo = copyPathC.GetBuffer(); //Pfad des Kopierordners sf.hNameMappings = NULL; sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SIMPLEPROGRESS;
Mfg und vielen Dank trotzdem