Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler bei write / writeln in eine Datei (https://www.delphipraxis.net/59621-fehler-bei-write-writeln-eine-datei.html)

Chrissi91 26. Dez 2005 08:12


Fehler bei write / writeln in eine Datei
 
Meine Procedure:

Delphi-Quellcode:
procedure DateiUeberschreiben(pfad: string; groesse: integer);
var
 i, a, zufall: integer;
 zeichen: string;
begin
 for a:= 1 to 10 do
  begin
   assign(datei,pfad);
   rewrite(datei);
   for i:= 1 to groesse do
    begin
     zufall:=random(15)+1;
     if zufall= 1 then zeichen:='@';
     if zufall= 2 then zeichen:='t';
     if zufall= 3 then zeichen:='ö';
     if zufall= 4 then zeichen:='+';
     if zufall= 5 then zeichen:='~';
     if zufall= 6 then zeichen:='*';
     if zufall= 7 then zeichen:='#';
     if zufall= 8 then zeichen:='w';
     if zufall= 9 then zeichen:='d';
     if zufall= 10 then zeichen:='b';
     if zufall= 11 then zeichen:=' ';
     if zufall= 12 then zeichen:=']';
     if zufall= 13 then zeichen:='3';
     if zufall= 14 then zeichen:='|';
     if zufall= 15 then zeichen:='2';
     write(datei,zeichen); // Fehlermeldung [Error] Unit1.pas(58): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'String'
// wenn ich das nehme: writeln(datei,zeichen); kommt das: [Error] Unit1.pas(58): Illegal type in Write/Writeln statement
    end;
   closefile(datei);
  end;
 deletefile(form1.verzeichnis.text);
end;
Die rufe ich wie folgt auf:

Delphi-Quellcode:
procedure TForm1.loeschenClick(Sender: TObject);
begin
 assignfile(datei,verzeichnis.text);
 reset(datei);
 dateiUeberschreiben(verzeichnis.text,filesize(datei));
 closefile(datei);
end;
Was mache ich falsch?

Daniel B 26. Dez 2005 08:23

Re: Fehler bei write / writeln in eine Datei
 
1. write(datei,zeichen);, zeichen ist vom Typ String, musst du in PChar umwandeln.
2. assignfile(datei,verzeichnis.text);, sicher das es .text und nicht .txt heisst?

Chrissi91 26. Dez 2005 08:25

Re: Fehler bei write / writeln in eine Datei
 
Verzeichnis ist vom Typ TEdit. der Pfad im Edit namens Verzeichnis stammt aus einem opendialog. :)

danke. aber wie wandel ich char in string? chartostr ... muss ich mal teten ^^

Daniel B 26. Dez 2005 08:27

Re: Fehler bei write / writeln in eine Datei
 
Dann gib doch dem Edit nen Namen womit man den auch erkennen kann... :roll:

PChar(zeichen);

PierreB 26. Dez 2005 08:27

Re: Fehler bei write / writeln in eine Datei
 
Zitat:

danke. aber wie wandel ich char in string? chartostr ... muss ich mal teten ^^
Delphi-Quellcode:
PChar('string');

GuenterS 26. Dez 2005 08:43

Re: Fehler bei write / writeln in eine Datei
 
1.
Du brauchst deinen String nicht in einen PChar verwandeln, da write sehr wohl auch Shortstring und String akzeptiert.

2.
In deiner Procedure "DateiUeberschreiben", schreibst Du "assign(datei,pfad);" Was soll das denn bringen?

Wäre AssignFile(datei, Pfad) nicht zielführender?

3.
In deiner Loeschen Procedure solltest Du bevor due die Ueberschreiben Procedure aufrufst, CloseFile aufrufen und die davor dir die Größe der Datei in einer Variablen speichern.

Sharky 26. Dez 2005 08:47

Re: Fehler bei write / writeln in eine Datei
 
Hai Christopher,

mal unabhängig von deinem Problem. Was hälst Du denn von diesem Ansatz um deine ganzen IF-Then Abfragen zu verhindern?
Delphi-Quellcode:
procedure DateiUeberschreiben(pfad: string; groesse: integer);
const
  myChars: array[1..15] of Char =
    ('@', 't', 'ö', '+', '~', '*', '#', 'w', 'd', 'b', ' ',
    ']', '3', '|', '2');
var
  i, a : integer;
  zeichen: Char;
begin
  for a := 1 to 10 do
  begin
    Assign(datei, pfad);
    rewrite(datei);
    for i := 1 to groesse do
    begin
      zeichen := myChars[random(15) + 1];
      .
      .
      .

marabu 26. Dez 2005 09:15

Re: Fehler bei write / writeln in eine Datei
 
Hallo Christopher,

Delphi-Quellcode:
var
  datei: TextFile;
wahrscheinlich hast du datei mit dem Typ file deklariert.

Weihnachtsgrüße vom marabu

Chrissi91 26. Dez 2005 09:39

Re: Fehler bei write / writeln in eine Datei
 
Zitat:

Zitat von marabu
Hallo Christopher,

Delphi-Quellcode:
var
  datei: TextFile;
wahrscheinlich hast du datei mit dem Typ file deklariert.

Weihnachtsgrüße vom marabu

Nein, ich bae

datei: file ;)

Alle anderen Vorschläge nehme ich gerne an. Ich wollte ja erstmal ganz simpel versuchen, eraser (dateien komplett löschen, dass man sie nicht mehr wiederfinden kann :)) nachzuproggen. das war erstmal ein kleiner ansatz. falls ihr für mein programm ein paar ideen habt, könnt ihr ja sie gerne posten. Nich tdenken, dass das gleich in die freeware sparte kommt ^^, denn ich denke, mit meiner methode lassen sich trotzdem dateien wiederfinden. :xmas:

Muetze1 26. Dez 2005 10:28

Re: Fehler bei write / writeln in eine Datei
 
Zitat:

Zitat von Chrissi91
Zitat:

Zitat von marabu
Hallo Christopher,

Delphi-Quellcode:
var
  datei: TextFile;
wahrscheinlich hast du datei mit dem Typ file deklariert.

Weihnachtsgrüße vom marabu

Nein, ich bae

datei: file ;)

Doch, also hast du doch. ReadLn() und WriteLn() kannst du nur auf Textdateien anwenden und daher will er datei vom Typ TextFile haben - wie marabu schon richtig sagte. Und Write() sowie Read() wollen bei einem untypirisierten Dateitype (File) binärdaten, Strukturen etc haben und keine Strings. Ändere den Typ von Datei und es wird damit schonmal klappen.

Marabu hat genau das richtige genannt - genauer lesen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 1 von 2  1 2      

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