Kitty82 Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 Hallo Zusammen, bevor ihr was sagt. Habe eure Such-Funktion genutzt und habe auch etwas passendes gefunden: http://forum.fachinformatiker.de/showthread.php?t=39377&highlight=Ordner+kopieren Habe versucht dieses Bsp. auch anzuwenden, jedoch habe ich noch Probleme. Ich möchte gern einen Ordner kopieren und ihn dann Umbennenen um eine Datei einzufügen. pathF += "\0\0"; path += "\0\0"; SHFILEOPSTRUCT FileStruct; FileStruct.hwnd = NULL; FileStruct.wFunc = FO_COPY; FileStruct.pFrom = pathF; FileStruct.pTo = path; FileStruct.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; FileStruct.lpszProgressTitle = "Kopiere Ordner..."; SHFileOperation(&FileStruct); Wenn ich es so ausführe, kommt bei mir die Meldung, dass die Datei nicht kpoiert werden kann, da die Quelldatei oder der Quelldatenträger nicht gelesen werden kann. Die Ordner bzw. Dateien sind nicht schreibgeschützt. Habe es auch versucht indem einen Testordner erstellt hab mti ein paar (leeren) Dateien. Da funktioniert es auch nicht. Was muss ich noch berücksichtigen, was ich übersehen habe? Danke für jede Hilfe! Gruß Kitty Zitieren
Guybrush Threepwood Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 Also bei mir klappt es so ohne Probleme: #include <stdio.h> #include <windows.h> int main() { SHFILEOPSTRUCT Op; Op.hwnd=NULL; Op.wFunc=FO_COPY; Op.pFrom="C:\\Aida32\0\0"; Op.pTo="D:\\test\\\0\0"; Op.fFlags=FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; Op.lpszProgressTitle="Kopiere CD..."; SHFileOperation(&Op); return 0; } [/PHP] Hast du mal überprüft ob die Pfade die du übergibst wirklich stimmen? Zitieren
Klotzkopp Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 pathF += "\0\0"; Das ist gleichbedeutend mit pathF += "";, tut also nichts. Eine doppelte Nullterminierung kannst du mit den üblichen Stringformatierungsfunktionen erreichen, indem du am Ende ein %c-Feld mit dem Wert 0 angibst. Zitieren
Kitty82 Geschrieben 15. Dezember 2005 Autor Geschrieben 15. Dezember 2005 Also bei mir klappt es so ohne Probleme: Hast du mal überprüft ob die Pfade die du übergibst wirklich stimmen? irgendwie klappt es bei dir immer und bei mir nicht. Habe die Pfade überprüft. Alles stimmt. Habe die Pfade sogar aus Adressenfeld kopiert und dann funktioniert es auf einmal: SHFILEOPSTRUCT FileStruct; FileStruct.hwnd = NULL; FileStruct.wFunc = FO_COPY; FileStruct.pFrom = "C:\\Software\\Projekt Kalibrierung\\Scanner\\Test\0\0"; FileStruct.pTo = "C:\\Software\\Projekt Kalibrierung\\Scanner\\LLS00050123\\\0\0"; FileStruct.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; FileStruct.lpszProgressTitle = "Erstelle Ordner..."; SHFileOperation(&FileStruct);[/PHP] warum auf einmal? :confused: der einzige unterschied ist nur, dass pFrom und pTo keine CString-Variable übergeben bekommen, sondern gleich den Text. path und pathF sind oben bei mir CString-Variablen, denen ich den Pfad so wie hier übergeben habe, also: path = "C:\\Software..." (usw.) wie kann ich denn CString hier übergeben? In dem Thread, wessen link ich oben eingefügt habe, klappte es doch auch mit CString? :confused: Danke + Gruß Kitty Zitieren
Guybrush Threepwood Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 Hast du Klotzkopps Rat berücksichtigt? Zitieren
Kitty82 Geschrieben 15. Dezember 2005 Autor Geschrieben 15. Dezember 2005 Hast du Klotzkopps Rat berücksichtigt? :eek den hab ich total übersehen. moment, werde das gleich mal versuchen!! sorry!! Zitieren
Kitty82 Geschrieben 15. Dezember 2005 Autor Geschrieben 15. Dezember 2005 Das ist gleichbedeutend mit pathF += "";, tut also nichts. Eine doppelte Nullterminierung kannst du mit den üblichen Stringformatierungsfunktionen erreichen, indem du am Ende ein %c-Feld mit dem Wert 0 angibst. meintest du das so? path.Format("%s\0",path); so funktioniert es nicht. auch wenn ich das "\" weglasse, geht es nicht. Oder hab ich dich falsch verstanden? Zitieren
Guybrush Threepwood Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 Nee so path.Format("%s%c%c",path,0,0); [/PHP] Zitieren
Klotzkopp Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 meintest du das so?Nein, das bringt auch nichts. Zusätzliche Nullzeichen am Ende eines Literals funktionieren nur, wenn man dieses Literal direkt einem Zeiger auf char zuweist. Weder CString noch irgendeine Stringfunktion kommt mit so etwas zurecht. Ich meinte etwas in der Art: CString temp = path; path.Format("%s%c", temp, 0);[/CODE] @G.T.: Damit hast du eine dreifache Nullterminierung. Das ist Overkill Außerdem: "The call will fail if the string object itself is offered as a parameter to Format." Zitieren
Guybrush Threepwood Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 @G.T.: Damit hast du eine dreifache Nullterminierung. Das ist Overkill Außerdem: "The call will fail if the string object itself is offered as a parameter to Format." Stimmt...ich wollte blos auf Nummer Sicher gehen:floet: Zitieren
Kitty82 Geschrieben 15. Dezember 2005 Autor Geschrieben 15. Dezember 2005 vielen Dank euch beiden für eure Tipps. Hoffe, ich kann euch auch irgendwann mal bei irgendwas so helfen :beagolisc jetzt funktioniert alles und ich hoffe, dass ich nicht bald wieder ein Problem haben werde :cool: Lg Kitty Zitieren
Guybrush Threepwood Geschrieben 15. Dezember 2005 Geschrieben 15. Dezember 2005 Dafür ist das Forum ja da Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.