?
Hallo,
zunächst das hier:
intern schrieb:
CString test( _T("C:\\testordner\\*\0"));
SHFILEOPSTRUCT sh;
sh.hwnd = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.wFunc = FO_DELETE;
sh.pFrom = test; //das geht auch nicht(strPathToDelete);
sh.pTo = NULL;
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL;
if (SHFileOperation (&sh) == 0)
kann nicht funktionieren, weil bei
CString test( _T("C:\\testordner\\*\0"));
test nur alle Zeichen bis zum ersten Null-Byte bekommt (die "Null" ist nicht enthalten, obwohl geschrieben, weil der Konstruktor zur "Füllung" des internen Zeichenspeichers hier nur alle Zeichen liest, bis die erste "Null" kommt, der Zeichenspeicher enthält also die "Null" nicht), eine zweite "Null", die erforderlich ist, gibt es hier nicht, nur eine, die bei
sh.pFrom = test
von CString hier "erzeugt" wird.
Hier:
intern schrieb:
oder wenn ich einfach sage
sh.pFrom = _T("C:\\testordner\\*\0")
ich suche auch schon nach literatur dazu aber leider finde ich nichts
liegt der Fall ganz anders, weil kein CString benutzt wird, es gibt keine Funktion hier (oben schon, weil dort ein Konstruktor "aufgerufen" wird, der nach einer bestimmten Regel die Zeichen analysiert), die erst alle Zeichen in einen bestimmten Bereich kopieren muss, hier liegen die Zeichen mit der explizit geschriebenen "Null" und mit einer "Null", die vom Compiler noch zusätzlich angefügt wird, in einem Speicherbereich, also alles so, wie es sein soll.
Und das hier:
intern schrieb:
und verrückt werde ich auch, denn das geht jetzt
strPathToDelete = _T("C:\\Download\\*");
strPathToDelete += _T('\0');
SHFILEOPSTRUCT sh;
sh.hwnd = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.wFunc = FO_DELETE;
sh.pFrom = strPathToDelete; //CString2TCHAR(strPathToDelete);
sh.pTo = NULL;
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL;
if (SHFileOperation (&sh) == 0)
was ist denn daran jetzt anderst? strPathToDelete += _T('\0');
klappt, weil durch Hinzufügen eines einzelnen ("Null-")Zeichens der interne Zeichenzähler um eins erhöht wird (es wird eine andere Funktion, nicht der Konstruktor wie oben, aufgerufen, die "Null"-Zeichen nicht "ablehnt"), die "Null" also mit erfasst wird und in den internen Zeichenspeicher übertragen wird. Eine zweite "Null" wird wieder, wie oben schon erklärt, von CString bereit gestellt.
MfG,
Probe-Nutzer