Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlermeldung bei Verwendung von AssignFile (https://www.delphipraxis.net/124739-fehlermeldung-bei-verwendung-von-assignfile.html)

UweR 24. Nov 2008 14:52


Fehlermeldung bei Verwendung von AssignFile
 
Hallo Leute,

bin gerade dabei ein altes Programm von D5 auf D7 umzustellen. Dabei haut mir der D7 eine Fehlermeldung um die Ohren mit der ich absolut nicht gerechnet habe und die ich mir auch absolut nicht erklären kann. Bei dem Code

Delphi-Quellcode:

var
   FPassword : File of TPassword;
     Password : TPassword;
     i : integer;

begin
   result := '';
     AssignFile(FPassword, sCUCMPath + '\cucm32.cpw');
meint er: [Fehler] Es gibt keine überladene Version von 'AssignFile', die man mit diesen Argumenten aufrufen kann

TPassword sieht übrigens so aus:

Delphi-Quellcode:
   TPassword = record
      acData : array[0..255] of char;
        acControl : array[0..7] of char;
   end;
Anyone any ideas?

Noedel 24. Nov 2008 14:54

Re: Fehlermeldung bei Verwendung von AssignFile
 
ersetz mal char mir string[1]

UweR 24. Nov 2008 15:00

Re: Fehlermeldung bei Verwendung von AssignFile
 
Hilft nicht, ich habe auch spasshalber mal die char-arrays durch integer ersetzt. Ergebnis ist das gleiche.

DeddyH 24. Nov 2008 15:01

Re: Fehlermeldung bei Verwendung von AssignFile
 
Von welchem Typ ist sCUCMPath?

UweR 24. Nov 2008 15:03

Re: Fehlermeldung bei Verwendung von AssignFile
 
sCUCMPath ist string, das kanns nicht sein. Wenn ich File of TPassword durch TextFile ersetze ist der Compiler auch an dieser Stelle erst mal glücklich.

Noedel 24. Nov 2008 15:05

Re: Fehlermeldung bei Verwendung von AssignFile
 
also bei mir sieht ne speichern procedure so aus
Delphi-Quellcode:
procedure save;
var
  f : FILE OF meinrecord;
  dateiname : STRING;
  rec: meinrecord
begin
  ASSIGN(f,dateiname); {Dateiname initialisieren}
  REWRITE(f); {Datei falls vorhanden überschreiben}
  WRITE(f,rec); {Record schreiben}
  CLOSE(f); {Datei schließen}
end;

DeddyH 24. Nov 2008 15:06

Re: Fehlermeldung bei Verwendung von AssignFile
 
Vielleicht gibt es irgendwo eine Klasse TPassword, die sich mit der Deklaration beißt. Was passiert denn, wenn Du den Record mal nach TPasswort umbenennst und FPassword dann als file of TPasswort deklarierst?

UweR 24. Nov 2008 15:13

Re: Fehlermeldung bei Verwendung von AssignFile
 
Es muss irgendein Seiteneffekt oder eine Einstellungssache sein. Wenn ich ein neues Projekt mit D7 anlege und mir den Code da rein haue geht's auch ohne Mecker. Es kann aber nicht an TPassword liegen weil es mir auch anderen Stellen passiert wo ich mit typisierten Dateien arbeite.

DeddyH 24. Nov 2008 15:15

Re: Fehlermeldung bei Verwendung von AssignFile
 
Da können wir aus der Ferne leider auch nur raten. Und das kommt bei jeder typisierten Datei im Projekt?

nahpets 24. Nov 2008 15:17

Re: Fehlermeldung bei Verwendung von AssignFile
 
Hallo,

dasda kann ich mit Delphi 7 problemlos kompilieren:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Type
  TPassword = record
    acData   : array[0..255] of char;
    acControl : array[0..7] of char;
  end;

var
   FPassword : File of TPassword;
   Password : TPassword;
   i        : integer;
   sCUCMPath : String;
begin
  sCUCMPath := 'C:';
  AssignFile(FPassword, sCUCMPath + '\cucm32.cpw');
  // System.AssignFile(FPassword, sCUCMPath + '\cucm32.cpw');
end;
Versuch mal, ob bei Dir die im Beispiel auskommentierte Version funktioniert. Eventuell hast Du ja irgendeine Unit eingebunden, die ebenfalls ein AssignFile enthält, dass aber andere (oder keinen) Parameter erwartet.

UweR 25. Nov 2008 07:55

Re: Fehlermeldung bei Verwendung von AssignFile
 
@Detlef:
Zumindest in einer Unit ist es so. Ich müßte in meinem Projekt mal die anderen Units überprüfen.

@Stephan:
Den Verdacht das da auf eine andere Unit verwiesen wird ist mir auch schon gekommen, ich werde mal in diese Richtung weiterforschen. Mal schauen was sich durch den Wechsel von D5 auf D7 so alles geändert ahben könnte. Der von dir gepostete Code funktioniertt in einer seperaten Unit einwandfrei, in die Unit wo er eigentlich rein soll aber nicht, deutet also stark auf ein Problem mit den eingebundenen Units hin.

DeddyH 25. Nov 2008 08:02

Re: Fehlermeldung bei Verwendung von AssignFile
 
Du könntest ja mal in einem Testprojekt die uses-Klausel so erweitern, dass dieselben Units in derselben Reihenfolge wie in Deinem "Problemkind" eingebunden werden. Kommt dort dann dieselbe Fehlermeldung, weiß man, in welcher Richtung man weiterzuforschen hat.

nahpets 25. Nov 2008 09:47

Re: Fehlermeldung bei Verwendung von AssignFile
 
Zitat:

Zitat von UweR
@Detlef:
Zumindest in einer Unit ist es so. Ich müßte in meinem Projekt mal die anderen Units überprüfen.

@Stephan:
Den Verdacht das da auf eine andere Unit verwiesen wird ist mir auch schon gekommen, ich werde mal in diese Richtung weiterforschen. Mal schauen was sich durch den Wechsel von D5 auf D7 so alles geändert ahben könnte. Der von dir gepostete Code funktioniertt in einer seperaten Unit einwandfrei, in die Unit wo er eigentlich rein soll aber nicht, deutet also stark auf ein Problem mit den eingebundenen Units hin.

Tritt der Fehler auch noch mit dieser Zeile auf?
Delphi-Quellcode:
System.AssignFile(FPassword, sCUCMPath + '\cucm32.cpw');

mkinzler 25. Nov 2008 09:57

Re: Fehlermeldung bei Verwendung von AssignFile
 
Versuche mal die relativen Pfade zu vermeiden

DeddyH 25. Nov 2008 09:59

Re: Fehlermeldung bei Verwendung von AssignFile
 
Welche relativen Pfade?

mkinzler 25. Nov 2008 10:00

Re: Fehlermeldung bei Verwendung von AssignFile
 
Zitat:

\cucm32.cpw

DeddyH 25. Nov 2008 10:01

Re: Fehlermeldung bei Verwendung von AssignFile
 
Zitat:

Delphi-Quellcode:
sCUCMPath + '\cucm32.cpw'

;)

UweR 2. Dez 2008 11:10

Re: Fehlermeldung bei Verwendung von AssignFile
 
Mit System.AssignFile geht es

DeddyH 2. Dez 2008 12:18

Re: Fehlermeldung bei Verwendung von AssignFile
 
Dann ist AssignFile nochmal in irgendeiner anderen eingebundenen Unit deklariert. Das sollte sich mit "In Dateien suchen" finden lassen.

Hawkeye219 2. Dez 2008 12:28

Re: Fehlermeldung bei Verwendung von AssignFile
 
Hallo,

Zitat:

Zitat von DeddyH
Das sollte sich mit "In Dateien suchen" finden lassen.

...oder einfach den Mauszeiger über "AssignFile" stehen lassen. Der dann angezeigte Hint sollte die notwendigen Informationen enthalten.

Gruß Hawkeye

DeddyH 2. Dez 2008 12:38

Re: Fehlermeldung bei Verwendung von AssignFile
 
Bei Delphi 7 auch schon? Na gut, wenn es so geht, ist das natürlich schneller.

turboPASCAL 2. Dez 2008 12:45

Re: Fehlermeldung bei Verwendung von AssignFile
 
// Edit: Quark. :oops:

Wäre es nicht besser und etwas sicherer noch eine kleine Verschlüsselung der Daten einzubauen ?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  TPassword = record
    acData   : array[0..255] of char;
    acControl : array[0..7] of char;
  end;

var
   FPassword : File of TPassword;
   Password : TPassword;
   i        : integer;
   sCUCMPath : String;

  function Moppel(XPasswords: TPassword): TPassword;
  var n: integer;
  begin
    ZeroMemory(@Result, sizeof(TPassword));
    for n := 0 to length(XPasswords.acData)-1 do
    begin
      if n <= length(XPasswords.acControl)-1 then
        Result.acControl[n] := chr( n+1 xor ord(XPasswords.acControl[n]) );
      Result.acData[n] := chr( n+1 xor ord(XPasswords.acData[n]) );
    end;
  end;

begin
  ZeroMemory(@Password, sizeof(TPassword));

  Password.acData := 'Heidi Müller';
  Password.acControl := 'DATABASE';

  Password := Moppel(Password);

  sCUCMPath := 'C:';
  AssignFile(FPassword, sCUCMPath + '\Users\Admin-User\Desktop\cucm32.cpw');
  rewrite(FPassword);
  write(FPassword, Password);
  CloseFile(FPassword);

  showmessage(format('acData: %s'#13'acControl: %s', [Password.acData, Password.acControl]));


  // lesen
  AssignFile(FPassword, sCUCMPath + '\Users\Admin-User\Desktop\cucm32.cpw');
  reset(FPassword);
  read(FPassword, Password);
  CloseFile(FPassword);

  Password := Moppel(Password);

  showmessage(format('acData: %s'#13'acControl: %s', [Password.acData, Password.acControl]));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz