Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben
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.

Geschrieben
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

Geschrieben
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?

Geschrieben
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."

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...