AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReWrite() findet kein File?

Ein Thema von TForm1 · begonnen am 10. Mai 2014 · letzter Beitrag vom 11. Mai 2014
Antwort Antwort
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#1

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 11:53
Wo liegt den eigentlich die Exe? Unter einem Pfad der ab Vista per Virtualisierung umgebogen ist? Evtl hast du damit Probleme.
Bei mir liegt die Exe nirgendwo, denn mein OS ist Mac.
Das Programm liegt bei mir ganz normal im Projektordner, unter documents.
Allerdings erstellt Lazarus das Bundle so, dass die Unix- Datei nicht im Programmbundle erzeugt wird sondern im Projektordner mit einem Alias ins Bundle. Ich denke aber nicht, das darin der Fehler liegt, schließlich war das schon immer so.

Wenn ich Suche Deklaration von ReWrite() mache, lande ich in Systemh.inc, wobei es ja mehrere ReWrite- Prozeduren gibt. Ich denke das ist einfach ein Bug von Lazarus, denn ich komme immer wieder auf anderen ReWrite()- Prozeduren heraus, mit anderen Parametern. Auch darin sollte kein Problem liegen, schließlich kompiliert der Compiler alles so wie er's soll.
Der Fehler sitzt immer vor dem Computer...

Geändert von TForm1 (10. Mai 2014 um 11:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 12:31
Hat der Pfad irgendwelche Sonderzeichen? Lazarus/FP hat ja so eine eigentümliche Art mit Sonderzeichen umzugehen. Bei meinen Test vor ca. 1 Jahr musst man etwas sehr unverständlich und gemischt Dateifunktionen einmal mit UTF und einmal ohne UTF8 im Namen aufrufen. Evtl. ist ja hier ein Fehler in der UTF8-Wandlungskette vorhanden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 13:12
Dann müßte man den Fehler weiter eingrenzen. Geht das?
Delphi-Quellcode:
function FileName: string;
begin
  Result := ExtractFilePath(ParamStr(0)) + 'SLTest.txt';
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Add('DP');
    SL.SaveToFile(FileName);
    Button2.Enabled := true;
  finally
    SL.Free;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile(FileName);
    ShowMessage(SL.Text);
  finally
    SL.Free;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Button2.Enabled := false;
end;
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#4

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 13:37
Sonderzeichen hat der Pfad keine (außer Leerzeichen in Ordnernamen).

Dann müßte man den Fehler weiter eingrenzen. Geht das?
Delphi-Quellcode:
function FileName: string;
begin
  Result := ExtractFilePath(ParamStr(0)) + 'SLTest.txt';
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Add('DP');
    SL.SaveToFile(FileName);
    Button2.Enabled := true;
  finally
    SL.Free;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile(FileName);
    ShowMessage(SL.Text);
  finally
    SL.Free;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Button2.Enabled := false;
end;
Der Quelltext funktioniert bei mir ohne Probleme, ich denke am Pfad kann es nicht liegen, der Pfad hat sich ja, seitdem ich upgedatet habe, nicht verändert und vorher funktionierte es ja einwandfrei. Das Problem muss m.E. im Schreiben der typisierten Datei liegen.

[EDIT] Ich weiß jetzt woran es lag, und zwar waren meine Records noch leer bzw. noch keine Variablen darin, da ich das später machen wollte. Wenn ich testweise eine Variable deklariere, funktioniert es. Warum macht es beim Schreiben der Datei etwas aus, wenn der Record noch keine Daten enthält? Im Grunde genommen ist das File beim Erstellen ja auch leer, oder?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 13:50
Das macht aber dem Rewrite nichts? Du hast die Datei doch als file of TMyRecord deklariert? Diese Reset/Rewrite Konstruktion ist eh irgendwie nicht so prickelnd? Ich würde sagen es ist Zeit für eine Liste (mit Methoden LoadFromFile, SaveToFile, Add, Delete, IndexOf ect..).
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 14:31
Das macht aber dem Rewrite nichts? Du hast die Datei doch als file of TMyRecord deklariert? Diese Reset/Rewrite Konstruktion ist eh irgendwie nicht so prickelnd? Ich würde sagen es ist Zeit für eine Liste (mit Methoden LoadFromFile, SaveToFile, Add, Delete, IndexOf ect..).
Also sollte ich besser, wie im obigen Beispiel mit TList arbeiten? Welche Vor-/Nachteile bringt das gegenüber einer typisierten Datei?


Trotzdem Danke an alle die mir geholfen haben!
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ReWrite() findet kein File?

  Alt 10. Mai 2014, 15:55
Was für ein TList Beispiel meinst du? Ich seh (hier) keins? Du würdest dir von Tlist deine eigene Liste ableiten und die Methoden LoadFromFile, SaveToFile ect. ergänzen. Dabei könnte die typisierte Datei bleiben. Man könnte das Zeugs aber auch in einen FileStream schreiben, da könntest du dann auch strings statt shortstrings verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 10:09
[EDIT] Ich weiß jetzt woran es lag, und zwar waren meine Records noch leer bzw. noch keine Variablen darin, da ich das später machen wollte. Wenn ich testweise eine Variable deklariere, funktioniert es. Warum macht es beim Schreiben der Datei etwas aus, wenn der Record noch keine Daten enthält? Im Grunde genommen ist das File beim Erstellen ja auch leer, oder?
Dass das Record leer war, ist genau das Problem. Wenn du ein Rewrite() auf eine file of XYZ Variable machst, dann ist Rewrite() keine der Funktionen, die du in systemh.inc siehst (zumindest im Vordergrund), sondern der Compiler ändert dies intern zu fpc_rewrite_typed(filevar, sizeof(XYZ)) (deklariert in compproc.inc). Dieses ruft dann Rewrite(var f: File; l: longint) auf (deklariert in file.inc), in dem widerum l explizit auf 0 geprüft wird. In dem Fall wird IOResult auf 2 gesetzt und dann eben eine Exception ausgelöst, falls IO-Exceptions aktiviert sind.

Eine Blöde Frage: Wenn man Records als Datentypen mit Prozeduren speichern kann, kann man dann auch Klassen als Typen in typisierten Files speichern (in der Art: file of TMyClass)? Wahrscheinlich doch nicht (habe es jedenfalls noch nie gesehen), oder?
Sagen wir mal so... man könnte sowas durchaus implementieren, aber dann ist wiederum die Frage welchen Sinn das hätte. Außerdem kannst du zum Speichern/Laden von Klassen (zumindest, wenn du published Properties verwendest) die entsprechenden Writer-/Reader-Klassen verwenden, welche zum Beispiel auch von Delphi und Lazarus für die Formulardateien verwendet werden.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#9

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 10:33
OK, dann weiß ich jetzt deutlich mehr als vorher!
Eine Frage habe ich aber noch: Sollte man besser eine TObjectList für Klassen- Objekte verwenden und dann entsprechend casten und was macht das dann im Unterschied zu einer TList?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#10

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 10:38
Es kommt drauf an, was man will.
Eine TList ist ja nur eine strunzdoofe Pointer-Liste.
Bei der TObjektList kann man der Liste dagegen auch die Verwaltung der Objekte übergeben. (z.B.: Wenn Eintrag gelöscht wird, dann gib automatisch das Objekt frei)

Und bei einer generischen TList/TObjektList kann man den Cast automatisch integrieren und den Compiler eine Typprüfung vornehmen lassen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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-2025 by Thomas Breitkreuz