Datei kopieren zu Laufzeit = Fehler
-
Feste Parameter sind kein Problem. Da geht es ja.
-
und wenn du dir das von GetCommandLine() ausgeben lässt? entspricht die ausgabe dem festen string?
-
Dutei schrieb:
LPCTSTR pTo;Das ergab sich aus der MSDN. Versteh dich nicht ganz.
pTo wird ja mit dem CString gefüllt.nein.
naja, nur solange der string lebt.was zeigt der rechner denn an, wenn du machst
CString strPath = GetCommandLine(); strPath=">"+strPath+"<";//nur mal, um anfang und ende genau zu sehen MessageBox(...//den strPath mal anzeigen? ist das genau der string, der als datenamen genommen werden soll?
geht genau der string, wenn du ihn als festen string nimmst?
was gibt denn bei dir folgendes programm aus?
int main(){ LPCTSTR pFrom; LPCTSTR pTo; CString strPath; strPath="sourceFile.txt"; pFrom=strPath; strPath="destinationFile.txt"; pTo=strPath; cout<<"from "<<pFrom<<endl; cout<<"to "<<pTo<<endl; if(strcmp(pFrom,pTo)==0) cout<<"houston, we have a problem!"<<endl; return 0; }wir können dir nicht direkt helfen, weil die anfrage nicht erlaubt, den fehler zu sehen. du zeigst nur code und sagst dazu, daß anderer code nicht geht. der andere hat vermutlich offensichtliche fehler, aber wie sehen ihn nicht.
außerdem sollste eigentlich nicht mit CString spielen, du würdest schneller vorankommen, wenn du erstmal nur mit c++ auf der konsole spielen würdest. auch mal zeiger und verkettete listen. mal sortieren und ein text-adventure. du kommst nämlich in teufels küche, wenn du keinen guten stil hast und dann vor probleme mit der winapi läufst. wirst dir einen dermaßen schlechten stil angewöhnen, weil die lösungen, die du als einige findest (dabei gibt es 10 lösungen und du solltest die beste finden), nicht gut sind, aber du sie dir angewöhnst.
-
Hallo Volkard,
also wenn ich den ersten Code von dir nehme steht in
der MessageBox exakt der Pfad zu der zu kopierenden Datei
im Debug bzw Realease-Ordner, inkl. EXEname.
Geb ich den Inhalt fixiert in einem CString anCString strPath="c:\\meintest\\irgendwo\\blabla\\debug\\test.exe";Kann ich problemlos kopieren.
Bei dem zweiten Code hat Houston eindeutig ein Problem
from und to werden richtig angezeigt, nur lande ich am Ende
dann doch in dieser Zeile:cout<<"houston, we have a problem!"<<endl;
-
int main(){ LPCTSTR pFrom; LPCTSTR pTo; CString strPathFrom ="sourceFile.txt"; pFrom=strPathFrom; CString strPathTo = "destinationFile.txt"; pTo=strPathTo; cout<<"from "<<pFrom<<endl; cout<<"to "<<pTo<<endl; if(strcmp(pFrom,pTo)==0) cout<<"houston, we have a problem!"<<endl; return 0; }
-
Soll passieren...
Ok jetzt bleib ich nicht mehr in der Zeile hängen.
Aber eine Lösung kann ich daraus nicht wirklich ableiten ?
-
Dutei, so können wir dir nicht helfen. Wir sind keine Hellseher.
-
Ok, dann nochmal der aktuelle Beispielcode. Ich habe keine Ahnung was
ich noch mehr zeigen soll. Aber evtl. bringt es ja etwas. Vielleicht
ist ja da der Kinken irgendwo doch noch drinne.CString strPath = GetCommandLine(); //damit gehtes nicht //CString strPath="c:\\test\\xyz\\meine.exe"; //damit geht es MessageBox(strPath);//einmal anzeigen zur Kontrolle strPath+='\0';//Null anhängen laut MSDN CString to="c:\\testdatei.exe"; //hier soll es hinkopiert werden to+='\0'; //Null anhängen laut MSDN SHFILEOPSTRUCT foCopy; foCopy.hwnd = NULL; // Handle foCopy.wFunc = FO_COPY; //operation kopieren wählen foCopy.pFrom = strPath; //von foCopy.pTo = to; //nach foCopy.fFlags = FOF_NOCONFIRMATION; foCopy.fAnyOperationsAborted = FALSE; foCopy.hNameMappings = NULL; foCopy.lpszProgressTitle = NULL; if(SHFileOperation(&foCopy) == 0) { MessageBox(strPath,"ok !!!"); } else { MessageBox(strPath,"nicht ok !!"); //hier lande ich immer }Das Ergebnis ist die Meldung dass von der Quelle oder dem Quelldatenträger
nicht gelesen werden kann. Es wird nichts kopiert.
-
Ich würde mir den string den GetCommandLine() zurückgibt einmal genauer ansehen. Denn wenn ich mir die MSDN docu ansehe dann dann lese ich daraus dass dir der gesammte Strimg zurückgegeben wird der normalerweise in den argv zu finden ist. Das würde aber bedeuten dass der String mit dem namen deiner .exe beginnt und dann wäre klar warum das kopieren nicht funktioniert.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcommandline.asp
Kurt
-
So blöde kann es kommen.
GetCommandLine liefer den Pfad in Anführungszeichen zurück!!
Man muss diese natürlich löschen. Sonst wirds nix mit dem
kopieren. -.- *ouch* War mir echt nicht aufgefallen.In tiefer Demut, ob eurer Zeit verschwendend, sich verneigend
Dutei
-
Bei mir ist der Pfad den GetCommandLine zurückgibt in " eingeschlossen.
"C:\MeinProgramm.exe"
Also das sollte doch wohl alles sagen. Benutz GetModuleFileName.
-
Man muss diese natürlich löschen.
Lieber nicht.