Entwickler-Ecke

Dateizugriff - Probleme beim löschen einer Datei


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
  //ini lesen
  IniDat := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'source.ini');
  Satz := 'source';

  Verzeichnis := IniDat.ReadString('source''quelle'' '); // lies aus ini

  // Nun die Datei löschen
  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


toms - Mo 02.05.05 07:52

Hallo!

Zitat:
Inkompatible Typen: 'String' und 'PAnsiChar'
sagt doch schon alles


Delphi-Quelltext
1:
DeleteFile(PChar(Verzeichnis));                    


Ansonsten kannst du auch Google bei Fehlermeldungen zu Rate ziehen:

Suche bei Google INKOMPATIBLE TYPEN: 'STRING' UND 'PANSICHAR'


Smartie - Mo 02.05.05 08:03

Alles klar,

Dankeschön.

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