![]() |
Wo soll das FileMode im Quellcode hin?
Frage:
Wo soll das FileMode im Quellcode hin? Was ist richtig, 1) oder 2) oder 3)?
Code:
Gruss Terencevar TR : TextFile; s : string; begin ... 1) AssignFile(TR, 'D:\Dir\FileName.txt'); FileMode:=fmOpenRead; Reset(T); ... 2) FileMode:=fmOpenRead; AssignFile(TR, 'D:\Dir\FileName.txt'); Reset(T); ... 3) AssignFile(TR, 'D:\Dir\FileName.txt'); Reset(T); FileMode:=fmOpenRead; ... {-} ReadLN(TR, s); {-} CloseFile(TR); {-} ... |
AW: Wo soll das FileMode im Quellcode hin?
Hallo,
1 oder 2, vor dem Open. Den alten Wert würde ich retten und nach der Operation wiederherstellen. |
AW: Wo soll das FileMode im Quellcode hin?
Ich vermute mit "FileMode" ist nicht das "Mode" im Record TR, sondern eine Variable die Du, aus welchen Gründen auch immer, irgendwo anders führst.
Dieses vorausgesetzt würde ich nach dem Reset(TR) (oder Rewrite(TR) oder Append(TR) oder CloseFile(TR))
Delphi-Quellcode:
machen.
FileMode:=TTextRec(TR).Mode;
Das stellt sicher, dass FileMode den Wert hat, der tatsächlich vom System gesetzt wurde. |
AW: Wo soll das FileMode im Quellcode hin?
Ich finde, das ist im Wiki ganz gut erklärt:
![]() |
AW: Wo soll das FileMode im Quellcode hin?
Frage an den original Poster: warum benutzt du diese klassischen Datei Routinen?
Es gibt inzwischen diverse modernere Alternativen, z. B. - TFileStream - TStringList.LoadFromFile |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
Nur weil es neuer\moderner ist muss es nicht immer den Bedürfnissen entsprechend besser sein. Denn irgendwo setzt auch TStringlist auf irgendwelche Methoden auf nicht das es sogar letztendlich aufs gleiche rauskommt nämlich mit zugriff auf die Win32Api. Die wurde bestimmt nicht für die TStringList neu erfunden. gruss |
AW: Wo soll das FileMode im Quellcode hin?
Hallo,
FileMode hat mit WinAPI nicht direkt zu tun. Aber ja: Ich denke TStringList benutzt intern auch FileMode. |
AW: Wo soll das FileMode im Quellcode hin?
Hat es mit Sicherheit. Es steuert ja, wie die Datei zu öffnen ist und reicht es an die API Funktion CreateFile weiter.
|
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
|
AW: Wo soll das FileMode im Quellcode hin?
Danke fuer die vielen Antworten.
Aus meiner Delphi 6 Hilfe erfahre ich ueber "FileMode" folgendes: --- Indicates the access mode on typed and untyped files opened by the Reset procedure. Unit System Category I/O routines var FileMode: Byte = 2; Description The FileMode variable determines the access mode to use when typed and untyped files (not text files) are opened using the Reset procedure. The default FileMode is 2 (Read/Write access). Assigning another value to FileMode causes all subsequent Resets to use that mode. The SysUtils unit declares a number of file open mode constants that can be assigned to the FileMode variable. Note: Be sure to reset FileMode before calling Reset with a read-only file. Even if you are only reading from the file, the default FileMode value (Read/Write access) will cause an attempt to open a read-only file to fail. Warning: FileMode is declared as a variable, not as a threadvar. Therefore this variable is not thread-safe. --- Leider kann ich nirgendswo feststellen, an welcher Position es zu stehen hat. Default ist immer FileMode:=fmOpenReadWrite; gesetzt. Bei der Verwendung von Append(T), also dem Oeffnen einer Textdatei, var T : TextFile;, steht Append(T) nach dem Reset(T). Hier muss FileMode:=fmOpenWrite; gesetzt werden. Da ich in meinem Programm aber mehrere TextDateien oeffne, muss ich den Wert im FileMode oefters aendern. Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
Ich habe weder FileMode selbst definiert noch hat es etwas mit ".Mode" zu tun. Danke fuer Deine Hilfe. Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
Dort steht auch nur das, was in meiner Delphi 6 Hilfe drinsteht. Alle irgendwo in der Hilfe vorkommenden Beispiel-Quellcodes ueber Reset(T),..., etc. lassen das FileMode nicht auftauchen, bzw. sind nicht in den Beispiel-Quellcodes dabei. Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
das mit dem "Retten" werde ich in Zukunft immer tun. Macht man ja beim var wOldErrorMode : word; begin ... wOldErrorMode:=SetErrorMode(SEM_FAILCRITICALERRORS ); ... SetErrorMode(wOldErrorMode); ... end; ebenfalls. Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Hallo,
korrekt. ;) |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
|
AW: Wo soll das FileMode im Quellcode hin?
Filemode muß vor Reset,Append oder Rewrite gesetzt sein/werden.
Gruß K-H |
AW: Wo soll das FileMode im Quellcode hin?
Nur vor Reset. Vor einem Append oder Rewrite den FileMode auf ReadOnly zu setzen wäre ja kontraproduktiv.
|
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
|
AW: Wo soll das FileMode im Quellcode hin?
Ich habe jetzt die Loesung zu der FileMode Position.
Delphi-Quellcode:
Bei einer anderen Position mit verschieden gesetzten Dateiattributen ergeben sich Werte groesser Null in der IORESULT Rueckgabe.
var S, D : File;
ior : integer; myDPFNSource, myDPFNDest : string; ... myDPFNSource:='D:\File1.ext'; myDPFNDest:='D:\File2.ext'; ... AssignFile(S, myDPFNSource); FileMode:=fmOpenRead; {$I-} Reset(S, 1); //oeffnen {$I+} inc(ior, IORESULT); {-} AssignFile(D, myDPFNDest); FileMode:=fmOpenReadWrite; {$I-} Rewrite(D, 1); //ueberschreiben bzw. erzeugen {$I+} inc(ior, IORESULT); ... Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
Gruss Terence |
AW: Wo soll das FileMode im Quellcode hin?
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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