XProfan Forum Community: Nach Serverausfall, noch geht fast nix, bin dran!

Español
Unidades

FileClass - de XProfan 8 Unit como Klasse incl. Source

 
El erste Versión meiner FileClass-Unit es fertig

Bitte no con el File-Unit verwechseln

Bisher Es el Auswahl a Klassen para XProfan sí todavía una bißchen dürftig, por lo tanto (y natürlich de persönlichen Interesse) tener Yo mich entschlossen una FileClass a redactar. Diese Klasse kann fast cualquier viele Archivos gleichzeitig redactar, bearbeiten oder lesen (unabhängig de los Profano-internen Befehlen).
Alle Métodos (Características en el Klasse) beruhen en reinem Windows-API. Un direkte Unterscheidung de Binär- y Textdateien no existe. El Syntax es auch muy simplemente.
Im beiligendem Source son todos Métodos ausführlich beschrieben, desweiteren Yo 3 Beispiele beigefügt, el una Einstieg erleichtern debería.
El Unit se, Yo hoffe en efecto en una bißchen Teamwork, todavía se ampliará. Einschränkungen a Tiempo: Fehlerbehandlung todavía Stiefmütterlich
Geschwindigkeit en Zeilenweise einlesen de Texten no tan besonders (bisher es todavía no Pufferung instalado).

Dateisystemfunktionen, also redactar de Ordnern, ermitteln de Pfaden usw. son no geplant. El Klasse se lediglich Dateioperationen ausführen. Selbstverständlich puede ser später auch separat una FileSystemClass redactar, el en Bedarf de dieser Klasse erbt

Saludo
Thomas
(ts-soft)
 $L
 $H windows.ph

{

    Class ?_File = -hFile&,
    -FileError&,
    +Error@,
    +Cerrar@,
    +Crear@,
    +Eof@,
    +Seek@,
    +Loc@,
    +Lof@,
    +Open@,
    +Read@,
    +GetFile@,
    +GetByte@,
    +GetWord@,
    +GetLong@,
    +GetFloat@,
    +GetString@,
    +GetData@,
    +PutByte@,
    +PutWord@,
    +PutLong@,
    +PutFloat@,
    +PutString@,
    +PutStringCR@,
    +PutData@,
    +Versión@

}

################################################
# Erstellen, öffnen y schliessen de Archivos #
################################################
Syntax: OBJEKT#.Crear(FileName$)
Ergebnis: Handle des Files,
en el Fehlerfall -1, OBJEKT#.Error se en TRUE gesetzt
Erklärung: Öffnet una vacío Expediente. Existiert el angegebene Expediente ya,
se esta geöffnet y por una vacío ersetzt!!!

Proc ?_File.Crear

    Parámetros FileName$
    .FileError& = 0

    {

        .hFile& = ~CreateFile(Addr(FileName$),
        O(~GENERIC_WRITE,~GENERIC_READ),
        0,
        0,
        ~CREATE_ALWAYS,
        ~FILE_ATTRIBUTE_NORMAL,
        0)

    }

    Case .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Volver .hFile&

ENDPROC

Syntax: OBJEKT#.Open(FileName$)
Ergebnis: Handle des Files,
en el Fehlerfall -1, OBJEKT#.Error se en TRUE gesetzt
Erklärung: Öffnet el angegebene Expediente oder erstellt una,
si todavía no existiert. Usted kannst nun Lese- y Schreibfunktionen en dieser Expediente ausführen

Proc ?_File.Open

    Parámetros FileName$
    .FileError& = 0

    {

        .hFile& = ~CreateFile(Addr(FileName$),
        O(~GENERIC_WRITE, ~GENERIC_READ),
        ~FILE_SHARE_READ | ~FILE_SHARE_WRITE,
        0,
        ~OPEN_ALWAYS,
        ~FILE_ATTRIBUTE_NORMAL,
        0)

    }

    Case .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Volver .hFile&

ENDPROC

Syntax: OBJEKT#.Read(FileName$)
Ergebnis: Handle des Files,
en el Fehlerfall -1, OBJEKT#.Error se en TRUE gesetzt
Erklärung: Öffnet una existierende Expediente FileName$ ausschließlich para Lese-Operationen

Proc ?_File.Read

    Parámetros FileName$
    .FileError& = 0

    {

        .hFile& = ~CreateFile(Addr(FileName$),
        ~GENERIC_READ,
        ~FILE_SHARE_READ,
        0,
        ~OPEN_EXISTING,
        ~FILE_ATTRIBUTE_NORMAL,
        0)

    }

    Case .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Volver .hFile&

ENDPROC

Syntax: OBJEKT#.Cerrar([File&])
Ergebnis: keins
Erklärung: Schließt el aktuelle Expediente, welche así no más benutzt voluntad kann
Wenn el optionale Parámetro File& übergeben se, se esta Expediente geschlossen, el
aktuelle Expediente restos hiervon unbeeinflusst

Proc ?_File.Cerrar

    If %PCount = 1

        Parámetros file&
        ~CloseHandle(file&)

    Más

        ~CloseHandle(.hFile&)
        .hFile& = 0

    EndIf

ENDPROC

###############
# Daten lesen #
###############
Syntax: OBJEKT#.GetByte()
Ergebnis: gelesenes Byte
Erklärung: Liest una Byte de el aktuell geöffneten Expediente una

Proc ?_File.GetByte

    Declarar temp1&, temp2#
    Dim temp2#, 1
    ~ReadFile(.hFile&, Addr(temp1&), 1, Addr(temp2#), 0)
    Disponer temp2#
    Volver temp1&

ENDPROC

Syntax: OBJEKT#.GetWord()
Ergebnis: gelesenes Word
Erklärung: Liest una Word de el aktuell geöffneten Expediente una

Proc ?_File.GetWord

    Declarar temp1&, temp2#
    Dim temp2#, 2
    ~ReadFile(.hFile&, Addr(temp1&), 2, Addr(temp2#), 0)
    Disponer temp2#
    Volver temp1&

ENDPROC

Syntax: OBJEKT#.GetLong()
Ergebnis: gelesenes Long&
Erklärung: Liest una Largo de el aktuell geöffneten Expediente una

Proc ?_File.GetLong

    Declarar temp1&, temp2&
    ~ReadFile(.hFile&, Addr(temp1&), 4, Addr(temp2&), 0)
    Volver temp1&

ENDPROC

Syntax: OBJEKT#.GetFloat()
Ergebnis: gelesenes Float!
Erklärung: Liest una Float de el aktuell geöffneten Expediente una

Proc ?_File.GetFloat

    Declarar temp1!, temp2#
    Dim temp2#, 8
    ~ReadFile(.hFile&, Addr(temp1!), 8, Addr(temp2#), 0)
    Disponer temp2#
    Volver temp1!

ENDPROC

Syntax: OBJEKT#.GetString()
Ergebnis: gelesene TextZeile como Texto$
Erklärung: Liest una String de el aktuell geöffneten Expediente,
a una End Of Line Signo gefunden es. UNIX oder DOS

Proc ?_File.GetString

    Declarar buffer#, bytesread&, Texto$
    Dim buffer#, 1

    Mientras que ~SetFilePointer(.hfile&, 0, 0, ~FILE_CURRENT) < ~GetFileSize(.hfile&, 0)

        ~ReadFile(.hfile&, Addr(buffer#), 1, Addr(bytesread&), 0)
        Case Byte(buffer#,0) = 0 : romper
        Case Byte(buffer#,0) = 10 : romper
        Texto$ = Texto$ + Chr$(Byte(buffer#,0))

    EndWhile

    Disponer buffer#
    Volver Translate$(Texto$, Chr$(13), "")

ENDPROC

Syntax: OBJEKT#.GetData(MemoryBuffer&, LengthToRead&)
Ergebnis: keins (gelesene Bytes befinden se en el MemoryBuffer&)
Descripción: Liest el Inhalt el aktuellen Expediente con el
angegebenen Longitud LengthToRead& (Anzahl a einzulesender Signo)
en el angegebenen Speicherbereich MemoryBuffer& por ejemplo Adresse
uno Bereichsvariable

Proc ?_File.GetData

    Parámetros MemoryBuffer&, LengthToRead&
    Declarar buffer#
    Dim buffer#, LengthToRead&
    ~ReadFile(.hFile&, MemoryBuffer&, LengthToRead&, Addr(buffer#), 0)
    Disponer buffer#

ENDPROC

###################
# Daten escribir #
###################
El hier folgenden Métodos trabajo sólo,
si el Expediente con Schreib-Unterstützung geöffnet wurde
(entweder con Crear oder Open)
Syntax: OBJEKT#.PutByte(Wert&)
Ergebnis: keins
Erklärung: Escribe una Byte-Valor en el aktuelle Expediente.

Proc ?_File.PutByte

    Parámetros Number&
    Declarar Temp#
    Dim Temp#, 1
    ~WriteFile(.hFile&, Addr(Number&), 1, Temp#, 0)
    Disponer Temp#

ENDPROC

Syntax: OBJEKT#.PutWord(Wert&)
Ergebnis: keins
Erklärung: Escribe una Word-Valor en el aktuelle Expediente.

Proc ?_File.PutWord

    Parámetros Number&
    Declarar Temp#
    Dim Temp#, 2
    ~WriteFile(.hFile&, Addr(Number&), 2, Temp#, 0)
    Disponer Temp#

ENDPROC

Syntax: OBJEKT#.PutLong(Wert&)
Ergebnis: keins
Erklärung: Escribe una Largo-Valor en el aktuelle Expediente.

Proc ?_File.PutLong

    Parámetros Number&
    Declarar Temp&
    ~WriteFile(.hFile&, Addr(Number&), 4, Addr(Temp&), 0)

ENDPROC

Syntax: OBJEKT#.PutFloat(Valor!)
Ergebnis: keins
Erklärung: Escribe una Float-Valor en el aktuelle Expediente.

Proc ?_File.PutFloat

    Parámetros Number!
    Declarar Temp!
    ~WriteFile(.hFile&, Addr(Number!), 8, Addr(Temp!), 0)

ENDPROC

Syntax: OBJEKT#.PutString(Texto$)
Ergebnis: keins
Erklärung: Escribe una String en el aktuelle Expediente

Proc ?_File.PutString

    Parámetros Texto$
    Declarar Temp#
    Dim Temp#, Len(Texto$)
    ~WriteFile(.hFile&, Addr(Texto$), Len(Texto$), Addr(Temp#), 0)
    Disponer Temp#

ENDPROC

Syntax: OBJEKT#.PutStringCR(Texto$)
Ergebnis: keins
Erklärung: Escribe una String en el aktuelle Expediente
y fügt una EOL Zeilenumbruch hinzu

Proc ?_File.PutStringCR

    Parámetros Texto$
    Declarar Temp#
    Texto$ = Texto$ + Chr$(13) + Chr$(10)
    Dim Temp#, Len(Texto$)
    ~WriteFile(.hFile&, Addr(Texto$), Len(Texto$), Addr(Temp#), 0)
    Disponer Temp#

ENDPROC

Syntax: OBJEKT#.PutData(MemoryBuffer&, LengthToWrite&)
Ergebnis: keins
Erklärung: Escribe el Inhalt des angegebenen Speicherbereichs
MemoryBuffer& con uno Longitud de LengthToWrite& en el aktuelle Expediente.

Proc ?_File.PutData

    Parámetros MemoryBuffer&, LengthToWrite&
    Declarar buffer#
    Dim buffer#, LengthToWrite&
    ~WriteFile(.hFile&, MemoryBuffer&, LengthToWrite&, Addr(buffer#), 0)
    Disponer buffer#

ENDPROC

############
# Diverses #
############
Syntax: OBJEKT#.Error()
Ergebnis: 0 oder 1
Erklärung: Gibt en el Fehlerfall True (1) zurück
Z. Zt. se sólo en ~INVALID_HANDLE_VALUE en
OBJEKT#.Crear(), OBJEKT#.Open() y OBJEKT#.Read() geprüft

Proc ?_File.Error

    Volver .FileError&

ENDPROC

Syntax: OBJEKT#.GetFile()
Ergebnis: Handle des Files
Erklärung: Hiermit kann auch nachträglich el
Handle el aktuellen Expediente ermittelt voluntad

Proc ?_File.GetFile

    Volver .hFile&

ENDPROC

Syntax: OBJEKT#.Eof()
Ergebnis: 0 oder 1
Erklärung: Hiermit ermitteln wir si el Ende el
Expediente erreicht wurde (1) oder no (0)

Proc ?_File.Eof

    Declarar Result&

    If ~SetFilePointer(.hFile&, 0, 0, ~FILE_CURRENT) < ~GetFileSize(.hFile&, 0)

        Result& = 0

    Más

        Result& = 1

    EndIf

    Volver Result&

ENDPROC

Syntax: OBJEKT#.Loc()
Ergebnis: Position
Erklärung: Gibt el aktuelle Zeiger-Position
innerhalb el Expediente zurück

Proc ?_File.Loc

    Volver ~SetFilePointer(.hFile&, 0, 0, ~FILE_CURRENT)

ENDPROC

Syntax: OBJEKT#.Seek(NewPosition&)
Ergebnis:
Descripción: Ändert el Lese/Schreib - Zeiger innerhalb
el Expediente en el angegebene NeuePosition. Dieser
Parámetro muss en Bytes angegeben voluntad

Proc ?_File.Seek

    Parámetros NewPosition&
    Volver ~SetFilePointer(.hFile&, NewPosition&, 0, ~FILE_BEGIN)

ENDPROC

Syntax: OBJEKT#.Lof()
Ergebnis: FileSize
Erklärung: LOF es para Length Of File (Longitud el Expediente).
Lo son el Longitud el aktuellen Expediente zurück

Proc ?_File.Lof

    Volver ~GetFileSize(.hFile&, 0)

ENDPROC

Syntax: OBJEKT#.Versión()
Ergebnis: Versión
Erklärung: Gibt el aktuelle Versión
dieser Klasse como String otra vez

Proc ?_File.Versión

    Volver "0.5.5.18"  Haupt-Versión.Jahr.Monat.Tag

ENDPROC


10 kB
Hochgeladen:18.05.2005
Ladeanzahl188
Descargar
 
13.05.2005  
 



Hab el Unit veces geupdatet.

OBJEKT#.UseFile(hFile&) wurde lejos. Machte desafortunadamente teilweise Problemas. Um mehrere Archivos a nutzen, es ahora erforderlich para jede Expediente una neue Instanz el Klasse anzulegen. Erhöht zwar algo el Schreibaufwand, pero es trotzdem weiterhin posible fast cualquier viel Archivos gleichzeitig a bearbeiten.
Das Ejemplo test3.prf wurde darauf angepaßt y igual todavía fehlerbereinigt.
En vorigen Versión, son me en mi Sistema no Fehler aufgefallen, lediglich Rolf teilte me esta con. Habs en efecto hoffentlich ahora beseitigt. Yo bin also el Testen de euch angewiesen.

Saludo
Thomas
 
18.05.2005  
 



Habs kurz getestet y funzt bien.

En me also Fehlerfrei.

Um no el número el Downloads cada veces en una Actualización sobre 0 a conjunto - nutze doch sólo el Durchsuchen Knopf - y luego klicke en neue Versión.

Salve.
 
18.05.2005  
 



Hola Thomas...

Bin desafortunadamente (todavía) kein XProfan Nutzer, deshalb voluntad Yo sólo veces auch no testen.
Bezogen en ~Generic_write | ~Generic_read podría dir aber como una Profanbug evtl. veces algo Problemas bereiten. Schau veces en Bugnity después de...
 
18.05.2005  
 



[quote:1382f2518b=iF]Habs kurz getestet y funzt bien.

En me also Fehlerfrei.[/quote:1382f2518b]Das Freud mich primero
[quote:1382f2518b=iF]
Um no el número el Downloads cada veces en una Actualización sobre 0 a conjunto - nutze doch sólo el Durchsuchen Knopf - y luego klicke en neue Versión.

Salve.[/quote:1382f2518b]
Habs wohl ya otra vez verkehrt gemacht

[quote:1382f2518b=AH]Schau veces en Bugnity después de...
[/quote:1382f2518b]Hab el entsprechenden Stellen con O angepaßt

Saludo
Thomas
 
18.05.2005  
 




Rolf
Koch
Hi Thomas,

sí lo va ahora!

Rolf
 
18.05.2005  
 



[quote:5439b97a2c]Schon otra vez falso gemacht[/quote:5439b97a2c]Gehe doch simplemente veces en el Arena - hay puede ser testen así viel uno möchte.

Salve.
 
18.05.2005  
 




Michael
Wodrich
Nachfolgend una Función con Blockpuffer.
Proc ?_file.getstring

    Declarar Buffer#, Bytesread&, Texto$, Texto2$, FSize&, aktPos&, found&
    Dim Buffer#, 1024
    FSize& = ~Getfilesize(.Hfile&, 0)
    aktPos& = ~Setfilepointer(.Hfile&, 0, 0, ~File_current)

    Mientras que aktPos& < FSize&

        ~Readfile(.Hfile&, Addr(Buffer#), 1024, Addr(Bytesread&), 0)
        Found& = MemPos(Buffer#,0,Chr$(0))

        If Found& <> -1

            Texto2$ = String$(Buffer#,0)
            Texto$ = Texto$ + Texto2$
            aktPos& = aktPos& + Len(Texto2$) + 1
            ~Setfilepointer(.Hfile&, aktPos&, 0, ~File_Begin)
            Romper

        EndIf

        Found& = MemPos(Buffer#,0,Chr$(10))

        If Found& <> -1

            Texto2$ = Char$(Buffer#,0,Found&)
            Texto$ = Texto$ + Texto2$
            aktPos& = aktPos& + Len(Texto2$) + 1
            ~Setfilepointer(.Hfile&, aktPos&, 0, ~File_Begin)
            Romper

        EndIf

        aktPos& = ~Setfilepointer(.Hfile&, 0, 0, ~File_current)

    Endwhile

    Disponer Buffer#
    Volver Translate$(Texto$, Chr$(13), "")

ENDPROC

 
Programmieren, das spannendste Detektivspiel der Welt.
23.12.2005  
 



Schön, el se todavía uno para esta Unit-Interessiert
Tal vez debería uno el Buffer en 4096 erhöhen, sólo de el Grunde, porque el Valor en otro me bekannten Características auch genommen se. Yo denke veces el se kein Zufall ser.

Frohe Weihnacht
 
23.12.2005  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

7.563 Views

Untitledvor 0 min.
Gast.081519.08.2024
Member 862464120.04.2024
Paul Glatz16.09.2018
Georg Teles16.01.2016
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie