Drei Dateitypen, die zum Lesen und Schreiben (E/A) in Delphi verwendet werden
1. Alter Pascal-Dateityp
Durch alte Dateivariablen dargestellte Dateitypen wie F:text, F:File sind drei Kategorien definiert: typisiert, untypisiert, Zeichentyp und einige Delphi-Dateioperationsfunktionen. Zum Beispiel: AssignPRn, Writeln, diese Dateiklassen ähneln Windows Dateihandle ist inkompatibel
2. Windows-Dateihandle (Handle)
Das objektorientierte Pascal-Dateihandle kapselt den Windows-Dateihandle-Typ und die Dateioperationsfunktionsbibliothek kapselt die Windows-API-Funktion „ReadFile“. Wenn Sie mit der Windows-API vertraut sind, können Sie Windows-Dateianweisungen verwenden, um Dateivorgänge auszuführen.
3. Dateistreams
Ein Dateistream ist eine Objektinstanz der TFileStream-Klasse. Ein Dateistream ist ein Dateioperationstyp auf hoher Ebene. Dieses Attribut kann zum Bedienen von Windows-Dateihandletypen verwendet werden.
So wählen Sie einen Dateityp aus
Das Windows-Dateihandle ist ein Dateioperationstyp auf niedrigerer Ebene, der eine flexible synchrone und asynchrone Dateilese- und -schreibsteuerung bietet. Im Folgenden finden Sie eine Pseudocode-Beschreibung der Dateisynchronisierung und des asynchronen Betriebs unter Verwendung des Windows-Dateihandle-Typs:
Synchrone Operationen:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// Auf eof prüfen
if (bResult && nBytesRead == 0, ) {
// wir sind am Ende der Datei
}
Asynchrone Operationen:
// Überlappende Strukturfelder einrichten
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULL;
// Versuchen Sie einen asynchronen Lesevorgang
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gÜberlappt) ;
// wenn ein Problem aufgetreten ist oder der asynchrone Vorgang noch aussteht ...
if (!bResult)
{
// Den Fehlercode behandeln
Schalter (dwError = GetLastError())
{
Fall ERROR_HANDLE_EOF:
{
// wir sind am Ende der Datei angelangt
//während des Aufrufs von ReadFile
// Code, um damit umzugehen
}
Fall ERROR_IO_PENDING:
{
// asynchrone E/A ist noch im Gange
// eine Weile etwas anderes machen
GoDoSomethingElse() ;
// Überprüfen Sie die Ergebnisse des asynchronen Lesevorgangs
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE) ;
// wenn es ein Problem gäbe ...
if (!bResult)
{
// Den Fehlercode behandeln
Schalter (dwError = GetLastError())
{
Fall ERROR_HANDLE_EOF:
{
// wir sind am Ende der Datei angelangt
Datei während des asynchronen Betriebs
}
// andere Fehlerfälle behandeln
}
}
} // Fall beenden
// andere Fehlerfälle behandeln
} // Endschalter
} // end if
Obwohl Windows-Dateihandles eine flexible Dateisteuerung bieten, muss mehr Fehlerbehandlungscode geschrieben werden.
Wenn Sie mit der Windows-API nicht vertraut sind, verwenden Sie den von Delphi empfohlenen alten Dateivariablentyp.
Der alte Dateityp von Delphi verwendet AssignFile, um Dateivariablen mit physischen Dateien zu verknüpfen, die von Delphi definiert werden
Verschiedene Operationen an Dateivariablen zur Vervollständigung des Dateizugriffs und der Bedienung. Im Folgenden wird die Dateivariablenklasse bereitgestellt
Geben Sie die Beschreibung des Operationscodes ein:
var
F: Textdatei;
S: Schnur;
beginnen
if OpenDialog1.Execute then { Offenes Dialogfeld anzeigen }
beginnen
AssignFile(F, OpenDialog1.FileName); { Im Dialogfeld ausgewählte Datei }
Zurücksetzen(F);
Readln(F, S); { Die erste Zeile aus der Datei lesen }
Edit1.Text := S; { Zeichenfolge in ein TEdit-Steuerelement einfügen }
CloseFile(F);
Ende;
Ende;
Der Datei-Stream ist eine Unterklasse von Streams (Stream-Klassen). Ein Vorteil seiner Verwendung besteht darin, dass er automatisch die Eigenschaften seiner übergeordneten Klasse erben kann. Er kann beispielsweise problemlos mit anderen Stream-Klassen zusammenarbeiten Speicherblock In die Festplatte können Sie zum Vervollständigen einen TFileStream und einen TMemoryStream verwenden.