Dateipfade bei CopyFile();
-
Hi
Wenn ich die CopyFile(); Funktion benutze muss ich immer doppelte Slashes machen z.B.: CopyFile("c:\\bla.txt", "c:\\bla\\bla.txt", 0);.Jetzt möchte ich aber die .exe meines Programms in ein Verzeichnis kopieren. Um das Verzeichnis herauszubekommen benutzte ich die Funktion: GetModuleFileName(NULL,str,dWord);
diese gibt aber den Dateipfad mit einfachen Slashes aus.
also ich möchte es im Prinzip so habenGetModuleFileName(NULL,str,dWord);
CopyFile(str, "c:\\blub\\bla.exe", 0);ich hoffe ihr versteht meine Frage.
-
Wenn du in einem String im Quellcode \\ schreibst ist das in Wirklichkeit auch nur ein Backslash
Da aber ein Backslash eine Escape-Sequenz einleitet muss der Backslash selbst in Strings als \\ geschrieben werdenWo genau liegt denn noch dein Problem?
PS: GetModuleFileName liefert den Pfad der Anwendung mit dem Dateinamen zurück
-
danke
das hab ich vergessen. Aber jetzt hab ich ein anderes Problem ich möchte nämlich auch eine Datei in das Systemverzeichnis kopieren. Das bekomme ich mit der Funktion GetSystemDirectory(); . Aber wie kann ich an den String, den diese funktion zurückgibt z.B. "C:\\windows\\system" noch den dateinamen anhängen?
-
lstrcat
-
nochmals danke
diese funktion kannte ich noch nicht.
-
ähm wie kann ich den rückgabewert der funktion lstrcat,der ja ein pointer is, in einen string umwandeln ?
-
häh
- das ist halt ein Pointer auf einen String! Was willst du mehr?
-
Du kannst auf zweierlei Art auf das Ergebnis zugreifen!
LPTSTR lstrcat(LPTSTR lpString1,LPCTSTR lpString2);
Einmal bekommst Du einen Zeiger auf lpString1 als Rückgabewert, andererseits kannst Du direkt mit lpString1 arbeiten!
Wenn Du Dir die Funktion mal genauer anschaust, wirst Du feststellen, das Du die ganze Zeit nur mit LPTSTR bzw. LPCTSTR arbeitest! Auch wenn Du glaubst Du hättest der Funktion einen String übergeben... Du hast ihr einen Long Pointer übergeben!
-
danke nochmals
Aber ich hab wieder ein anderes problem:// Pfad der exe
GetModuleFileName(NULL,str,dWord);
// systemverzeichnis
GetSystemDirectory( sysdir_name, sizeof( sysdir_name ) );lstrcat(sysdir_name, "\\bla.exe");
if(str!=sysdir_name)
{
...
}wenn ich diesen code ausführe, dann wird immer der anweisungsblock bei if ausgeführt egal ob sich die .exe im systemverzeichnis befindet oder nicht.
Danke schon mal im voraus.
-
lstrcmp zum strings vergleichen
-
Strings immer mit strcmp() (oder vergleichbaren Funktionen) vergleichen!
also:
// Pfad der exe GetModuleFileName(NULL,str,dWord); // systemverzeichnis GetSystemDirectory( sysdir_name, sizeof( sysdir_name ) ); lstrcat(sysdir_name, "\\bla.exe"); if(lstrcmp(str, sysdir_name)!=NULL) { //Das hier wird gemacht, wenn str != sysdir_name }
[ Dieser Beitrag wurde am 19.03.2003 um 21:37 Uhr von Hepi editiert. ]
-
sag ich doch !!!!!!!!!!!!!!!!!!!!!!
-
Jo, war zu langsam...
-
Mal so nebenbei gefragt:
Was für ein Programm zimmern wir hier eigentlich zusammen?
Die eigene .exe in ein Systemverzeichnis kopieren.. klingt ja abenteuerlich!
-
so ähnlich
-
trojaner?
-
ich will euch ja nicht nerven, aber ich hab wieder ein prob. Irgendwie kann ich mit fscanf nur einen string mit maximal ~40 zeichen aus einer datei auslesen. kann man das ändern oder gibts da ne alternative ?
-
sorry schon gefunden -> fgets
-
@gr das wäre schön wenn ich so gut coden könnte um nen trojaner hinzubekommen aber leider bin ich noch ein blutiger anfänger.