Smartie - Mo 02.05.05 07:37
Titel: Probleme beim löschen einer Datei
Servus!
Ich möchte eine Datei löschen, und hab folgendes in der Hilfe gefunden:
Quelltext
1: 2: 3:
| function DeleteFile(const FileName: string): Boolean;
DeleteFile löscht die mit FileName angegebene Datei vom Datenträger. Kann die Datei nicht gelöscht oder gefunden werden, gibt die Funktion false zurück. |
Ok, dacht ich mir, schön, dann ist ja alles klar, und habs dann versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Verzeichnis, Satz : String; begin IniDat := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'source.ini'); Satz := 'source';
Verzeichnis := IniDat.ReadString('source', 'quelle', ' '); DeleteFile(Verzeichnis); |
Da brignt er mir aber die Fehlermeldung:
| Zitat: |
| [Fehler] Unit1.pas(455): Inkompatible Typen: 'String' und 'PAnsiChar' |
Es ist doch ein sTring, ich weiß gar nicht was er hat. *grübel*
Weiß jemand was da nicht stimmt?
Danke und lieben Gruß
Smartie
Brueggendiek - Di 03.05.05 06:25
Hallo Smartie!
Dein Problem ist darauf zurückzuführen, daß es DeleteFile zweimal gibt:
1. Es gibt den WinAPI-Aufruf, der wie üblich einen Pchar als Parameter erwartet
2. Die Delphi-Kapselung in der Unit SysUtils - und die kommt mit einem String zurecht.
Wie immer bei identischen Bezeichnern in verschiedenen Units, hängt es von der Reihenfolge der Units in der Uses-Anweisung ab, welche genommen wird.
Abhilfe: Da oft ein Umstellen der Uses wieder andere Probleme bringt (vielleicht ist es bei einem weiteren Bezeichner ja genau andersrum gemeint), kann man mit vorgestelltem Unit-Namen diesen Automatismus abschalten. Schreibe also
Delphi-Quelltext
1:
| SysUtils.DeleteFile(Verzeichnis); |
dann klappt's auch mit dem Nachbarn - ähem String!
Natürlich muß dazu SysUtils in die Uses eingetragen werden.
Wenn Du in der Hilfe selber den Suchbegriff eingibst (F1, dann "DeleteFile"), bekommst Du nur die Delphi-Kapselung. Wenn Du aber im Source "DeleteFile" stehen hast, den Corsor draufsetzt und F1 drückst, bietet die Hilfe beide Varianten an.
Gruß
Dietmar Brüggendiek