![]() |
inkompatibilität von dateitypen
Delphi-Quellcode:
gibt die fehlermeldung "incompatible types: 'String' and 'PChar'"
const datenpfad='c:\test\';
backuppfad='c:\test\BU\'; var s='123.txt'; Windows.CopyFile(datenpfad+s, BackupPfad+'testBU.txt',false); was kann ich dagegen tun? Gruß Martin |
Re: inkompatibilität von dateitypen
Delphi-Quellcode:
CopyFile(PChar(datenpfad+s), PChar(BackupPfad+'testBU.txt'),false);
|
Re: inkompatibilität von dateitypen
du musst den String zum PChar umwandlen (casten)
Delphi-Quellcode:
Du hast schlichtweg den Falschen Typ übergeben. Es wurde ein PChar verlangt und du hast versucht einen String zu übergeben. Das wäre ungefähr so als würdest du bei einer Funktion die einen Integer als Parameter verlangt einen String übergeben.
Windows.CopyFile(PChar(datenpfad+s), PChar(BackupPfad+'testBU.txt'),false);
[Edit]Hab das trotzdem mal gepostet, trotz dessen das die Antwort schon da war damit der Fragende auch den Grund für die Meldung des Compilers erfährt[/Edit] |
Re: inkompatibilität von dateitypen
Delphi-Quellcode:
CopyFile(@(datenpfad+s)[1], @(BackupPfad+'testBU.txt')[1],false);
|
Re: inkompatibilität von dateitypen
@SirThornberry:
Sag ich doch! PChar(...) Das Windows. kann man auch weglassen, wenn Winduws in uses eingebunden ist. |
Re: inkompatibilität von dateitypen
*flüster* Das ist der Fluch des roten Kastens...
|
Re: inkompatibilität von dateitypen
@Martin: Jup, du hattest die richtige Lösung bereits geschrieben. Ich wollte eben damit sich der Fragende weiterbilden kann, das Wort "Cast" noch erwähnen und ein Beispiel warum es falsch ist (vergleich Integer<>String).
|
Re: inkompatibilität von dateitypen
@SirThornberry:
Jo, war ja nicht bös gemeint. |
Re: inkompatibilität von dateitypen
![]() |
Re: inkompatibilität von dateitypen
besten Dank, das wort casten ist mir gerade nicht eingefallen, aber genau sowas suchte ich.
Delphi-Quellcode:
sowas ähnliches hab ich auch schon probiert, nur leider ohne @ und mit einer 0 statt einer 1...
CopyFile(@(datenpfad+s)[1], @(BackupPfad+'testBU.txt')[1],false);
gruß Martin |
Re: inkompatibilität von dateitypen
@ erzeugt einen Pointer und das [1] lässt ihn aufs erste Zeichen des Strings zeigen. Ein String ist 1-basiert, nicht wie normale dynamische Arrays 0-basiert. Bei "alten" Strings kann man mit s[0] auf die Länge des Strings zugreifen, bei den "neuen" geht das nicht mehr.
Ein PChar ist definiert als Pointer auf das erste Zeichen einer Zeichenkette, terminiert durch ein Nullbyte. Mit @s[1] machst du genau das. PChar(s) kann man genauso hernehmen. |
Re: inkompatibilität von dateitypen
das hab ich eben durch rumspielen und fehlermeldungen interpretieren auch noch mal rausbekommen. bin sonst eher in der c welt unterwegs, da sind die strings ein wenig anders organisiert...
besten dank noch mal für Deine erläuterungen. |
Re: inkompatibilität von dateitypen
Was genau ist PChar?
Integer = ganze Zahl Real = Zahl String = Text PChar = :?: |
Re: inkompatibilität von dateitypen
Pointer to Char: Ein Zeiger auf eine Char7erstes Zeichen eines nullterminierten Strings.
|
Re: inkompatibilität von dateitypen
Noch 'ne Frage:
Was bewirkt das false (bzw. true) bei CopyFile?
Delphi-Quellcode:
CopyFile(PChar('Datei1.bsp'),PChar('Datei2.bsp'),false);
|
Re: inkompatibilität von dateitypen
Ist der Parameter "False", dann wird eine schon vorhandene Datei überschrieben, ansonsten liefert die Funktion "False" zurück.
|
Re: inkompatibilität von dateitypen
Die Delphihilfe hätte dir gesagt, das der 3.Paramter angibt ob bei Existieren der Zieldatei ein Fehler ausgelöst wird oder diese überschrieben wird.
[Edit: war wohl zu langsam ...] |
Re: inkompatibilität von dateitypen
Moin :-)
Der letzte Parameter (True oder False) gibt an, was geschehen soll, wenn die Zieldatei schon vorhanden ist -> bei False wird die Zieldatei ohne Rückfrage überschrieben, bei True bricht die CopyFunktion ab. Um zu verhindern, dass ggf. eine vorhandene Datei überschrieben wird, entweder VOR dem CopyFile(...) mit FileExists(...) abfragen oder aber so
Code:
if CopyFile(...) = 0 then //Fehler->ZielDatei bereits vorhanden
... Zitat:
|
Re: inkompatibilität von dateitypen
Zitat:
-zuwenig Speicher -Quelldatei nicht vorhanden/oder keine Leserechte -Dateiname der Zieldatei fehlerhaft -Zieldatei bereits vorhanden ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz