Pfad umwandeln?
-
nein gibt es soviel ich weiss nicht - wozu soll das gut sein ?
-
Das hat absolut keinen Sinn.
-
Hallo zusammen,
ich verwende der struct "SHFILEOPSTRUCT". Er hat eine Variable "pFrom".
Also:SHFILEOPSTRUCT foCopy;
foCopy.pFrom = L"C:\\temp\*.zip\0";
Das ist natürlich nicht mein Ziel, dass ich den Pfad hard codiere!
Ich habe ein Array namens "szFullPathName" in diesem Array steht z. B. "C:\temp\".
Wenn ich jetzt an der Variable "pFrom" nur C:\temp\ übergebe, wird es natürlich nicht
funktionieren!Ich habe gedacht, dass da vielleicht schon eine Funktion existiert, dass sie an
den "\" einen weitern "\" daran hängt!Ich werde jetzt selbst eine Funktion schreiben.
Ich lege ein neues Array an wie z. B. validPath, dann kopiere ich zeichenweiser
aus dem Array "szFullPathName" zu "validPath", bis ich im Array "szFullPathName" einen
"\" bzw. '\' finde. Danach hänge ich einen weiteren "\" daran.
-
leonReif schrieb:
Wenn ich jetzt an der Variable "pFrom" nur C:\temp\ übergebe, wird es natürlich nicht
funktionieren!...und wer hat Dir so einen Schwachsinn erzählt?
Natürlich funktioniert das so!
-
Hi!
Ich habe es getestet und es hat leider nicht funktioniert!
Ich habe gerade das Problem gelöst. Es funktioniert.
int pathIndex = 0; int validPathIndex = 0; for(pathIndex = 0; pathIndex < MAX_PATH; ++pathIndex) { if(path[pathIndex] != '\0') { if(path[pathIndex] !='\\') { validPath[validPathIndex] = path[pathIndex]; validPathIndex++; } else { validPath[validPathIndex] = path[pathIndex]; validPath[++validPathIndex] = '\\'; validPathIndex++; } } else { break; } }
-
Irgendwas scheint dann bei dir aber derbst kaputt zu sein!
Wenn du ne Variable
char blupp[500]; strcpy(blupp,"c:\\test\\blupp\\*"); // Die doppelten Backslashes stellen eigentlich nur einen dar, \n z.B. wäre ein Zeilenumbruch, will man aber wirklich als text '\n' im String haben, müsste man hier \\n schreiben....hast du in der Variable blupp "c:\test\blupp\*" stehen
Die SHFileOperation will bei .pFrom lediglich noch am Ende des Strings eine zusätzliche Nullterminierung haben...
-
Hallo,
in der Variable "validPath" steht c:\\temp\*
Die doppelten Backslashes stellen eigentlich nur einen dar, \n z.B. wäre ein >Zeilenumbruch, will man aber wirklich als text '\n' im String haben, müsste >man hier \\n schreiben.
Danke für den Tipp, aber ich weiss es schon, dass '\' nur einen \ darstellt.
Die SHFileOperation will bei .pFrom lediglich noch am Ende des Strings eine zusätzliche Nullterminierung haben...
Ich habe am Anfang so probiert:
.pFrom = L"C:\temp\test\\*.zip\0"Aber ich bekomme folgende Fehlermeldung:
Die Datei kann nicht kopiert werden ... Die Quelle konnte nicht ...
Seitdem ich aber einen zusätzlichen \ daran hänge, also in Form C:\\temp\\test\\ dann funktioniert es auch. Ich würde mal sagen, dass wir so stehen lassen.
Danke für Deine Antwort

-
leonReif schrieb:
Ich habe am Anfang so probiert:
.pFrom = L"C:\temp\test\\*.zip\0"Aber ich bekomme folgende Fehlermeldung:
Die Datei kann nicht kopiert werden ... Die Quelle konnte nicht ...
Seitdem ich aber einen zusätzlichen \ daran hänge, also in Form C:\\temp\\test\\ dann funktioniert es auch. Ich würde mal sagen, dass wir so stehen lassen.
Du hast eben nicht überall ein \\

.pFrom = L"C:\\temp\\test\\*.zip\0"
-
Hi!
Du hast eben nicht überall ein ...
Ich weiss es. Ich sagte doch, das war am Anfang.
Deshalb:
int pathIndex = 0; int validPathIndex = 0; for(pathIndex = 0; pathIndex < MAX_PATH; ++pathIndex) { if(path[pathIndex] != '\0') { if(path[pathIndex] !='\\') { validPath[validPathIndex] = path[pathIndex]; validPathIndex++; } else { validPath[validPathIndex] = path[pathIndex]; validPath[++validPathIndex] = '\\'; validPathIndex++; } } else { break; } }Dann klappt’s auch mit dem Nachbarn

-
Da kann man manchmal echt nur mit dem Kopf schütteln...
Benutz weiterhin Deine Funktion, aber akzeptiere bitte die Tatsache, das sie unnütz ist, wenn man die Pfade gleich richtig angibt.
-
-
Hi!
Sorry, Du hast vollkommen recht

Ich habe heute morgen gemerkt.
Ich habe die alte Schleife durch dieser ersetzt:
wchar_t szSourcePath[MAX_PATH] = {0}; char szPath[MAX_PATH] = {0}; //Code .... strcat(szPath, "*.zip\0"); for(int j = 0; j < MAX_PATH; ++j) { if(szPath[j] != '\0') { szSourcePath[j] = (unsigned short)szPath[j]; } else { szSourcePath[j] = '\0'; break; } }
-
-
leonReif schrieb:
dEUs schrieb:
Gut erklärt

Ironisch gemeint?
-
Was hälst du eigentlich davon:
wchar_t szSourcePath[MAX_PATH] = ""; char szPath[MAX_PATH] = ""; //Code .... strcat(szPath, "*.zip"); strcpy(szSourcePath,szPath, strlen(szPath));Die Schleife ist nämlich sinnlos.
-
dEUs schrieb:
leonReif schrieb:
dEUs schrieb:
Gut erklärt

Ironisch gemeint?
Ironisch gemeint?
Nein auf gar keinen Fall. Ich bin direkt. Wenn mir etwas nicht passt, dann sage ich es ...

-
Hi!
Mit
strcpyfunktioniert nicht, da die Funktion
strncpynur zwei Parameter aufnimmt. Aber es gibt die Funktion
char *strncpy( char *strDest, const char *strSource, size_t count )Aber ich bekomme folgende Fehlermeldung bei kompilieren:
error C2664: 'strncpy' : cannot convert parameter 1 from 'unsigned short [260]' to 'char *'Ich habe vorher nach eine Funktion gesucht, die man eine unsigned short Array in ein char Array oder umgekehrt konvertieren kann. Deshalb habe ich die Schleife geschreiben!
-
dann nimm strcpy und lass den letzten parameter weg. Und mach vor die ersten beiden ein (char*)
-
Hi!
Ich habe es gerade probiert.
Das Ergebnis voher mit der Schleife:
C:\temp\10.zip
Das Ergebnis nachher mit strcpy:
strcpy((char*)szSourcePath, (char*)szPath);C\ep\.i
Anscheind gehen Informationen verloren!
-
strcpy frißt Zeichen auf?
Auch nicht schlecht... da Du sicherlich der erste Entdecker dieses Verhaltens bist, darfst Du diesem Phänomen einen Namen geben.
...könnte aber auch sein das Du da schlichtweg überhaupt nicht weißt, was Du da tust und daher einen jenes Verhalten hervorrufende Fehler selber reingebaut hast.
Ist alles möglich...
