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

Français
Unités

FileClass - ab XProfan 8 Unit comme super incl. Source

 
la première Version meiner FileClass-Unit ist fertig

s'il te plaît pas avec qui File-Unit verwechseln

Bisher ist qui sélection à Klassen pour XProfan oui encore légèrement dürftig, daher (et naturellement aus personnel intérêt) hab je mich entschlossen une FileClass trop erstellen. cet super peux presque beliebig viele Fichiers gleichzeitig erstellen, Travailler ou bien lesen (indépendant de den Profan-internen Befehlen).
Alle Methoden (Funktionen dans qui super) beruhen sur reinem Windows-API. une directe Unterscheidung de Binär- et Textdateien gibt es pas. qui Syntax ist aussi très simple.
Im beiligendem Source sommes alle Methoden en détails beschrieben, desweiteren habe je 3 Beispiele beigefügt, qui une Einstieg erleichtern devrait.
qui Unit soll, je hoffe oui aussi sur légèrement Teamwork, encore plus étendu volonté. Einschränkungen zur Zeit: Fehlerbehandlung encore Stiefmütterlich
Geschwindigkeit chez Zeilenweise einlesen de Texten encore pas so besonders (bisher ist encore aucun Pufferung incorporé).

Dateisystemfunktionen, alors erstellen de Ordnern, ermitteln de Pfaden usw. sommes pas geplant. qui super soll lediglich Dateioperationen effectuer. bien sûr peux on später aussi separat une FileSystemClass erstellen, qui chez besoin de cette super erbt

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

{

    Class ?_File = -hFile&,
    -FileError&,
    +Error@,
    +Fermer@,
    +Créer@,
    +Eof@,
    +Seek@,
    +Loc@,
    +Lof@,
    +Open@,
    +Read@,
    +GetFile@,
    +GetByte@,
    +GetWord@,
    +GetLong@,
    +GetFloat@,
    +GetString@,
    +GetData@,
    +PutByte@,
    +PutWord@,
    +PutLong@,
    +PutFloat@,
    +PutString@,
    +PutStringCR@,
    +PutData@,
    +Version@

}

################################################
# Erstellen, öffnen et schliessen de Fichiers #
################################################
Syntax: OBJEKT#.Créer(FileName$)
Ergebnis: Handle des Files,
im Fehlerfall -1, OBJEKT#.Error wird sur TRUE gesetzt
Erklärung: Öffnet une le vide Dossier. Existiert qui angegebene Dossier bereits,
wird cet ouvert et par une le vide ersetzt!!!

Proc ?_File.Créer

    Paramètres FileName$
    .FileError& = 0

    {

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

    }

    Cas .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Retour .hFile&

ENDPROC

Syntax: OBJEKT#.Open(FileName$)
Ergebnis: Handle des Files,
im Fehlerfall -1, OBJEKT#.Error wird sur TRUE gesetzt
Erklärung: Öffnet qui angegebene Dossier ou bien erstellt une,
si encore aucun existiert. Du peux eh bien Lese- et Schreibfunktionen dans cette Dossier effectuer

Proc ?_File.Open

    Paramètres FileName$
    .FileError& = 0

    {

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

    }

    Cas .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Retour .hFile&

ENDPROC

Syntax: OBJEKT#.Read(FileName$)
Ergebnis: Handle des Files,
im Fehlerfall -1, OBJEKT#.Error wird sur TRUE gesetzt
Erklärung: Öffnet une existierende Dossier FileName$ ausschließlich pour Lese-Operationen

Proc ?_File.Read

    Paramètres FileName$
    .FileError& = 0

    {

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

    }

    Cas .hFile& = ~INVALID_HANDLE_VALUE : .FileError& = 1
    Retour .hFile&

ENDPROC

Syntax: OBJEKT#.Fermer([File&])
Ergebnis: keins
Erklärung: Schließt qui aktuelle Dossier, quelle avec cela pas plus benutzt volonté peux
si qui optionale paramètre File& übergeben wird, wird cet Dossier geschlossen, qui
aktuelle Dossier bleibt hiervon unbeeinflusst

Proc ?_File.Fermer

    Si %PCount = 1

        Paramètres file&
        ~CloseHandle(file&)

    D'autre

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

    EndIf

ENDPROC

###############
# données lesen #
###############
Syntax: OBJEKT#.GetByte()
Ergebnis: gelesenes Byte
Erklärung: Liest un Byte aus qui aktuell geöffneten Dossier un

Proc ?_File.GetByte

    Déclarer temp1&, temp2#
    Faible temp2#, 1
    ~ReadFile(.hFile&, Addr(temp1&), 1, Addr(temp2#), 0)
    Dispose temp2#
    Retour temp1&

ENDPROC

Syntax: OBJEKT#.GetWord()
Ergebnis: gelesenes Word
Erklärung: Liest un Word aus qui aktuell geöffneten Dossier un

Proc ?_File.GetWord

    Déclarer temp1&, temp2#
    Faible temp2#, 2
    ~ReadFile(.hFile&, Addr(temp1&), 2, Addr(temp2#), 0)
    Dispose temp2#
    Retour temp1&

ENDPROC

Syntax: OBJEKT#.GetLong()
Ergebnis: gelesenes Long&
Erklärung: Liest un Long aus qui aktuell geöffneten Dossier un

Proc ?_File.GetLong

    Déclarer temp1&, temp2&
    ~ReadFile(.hFile&, Addr(temp1&), 4, Addr(temp2&), 0)
    Retour temp1&

ENDPROC

Syntax: OBJEKT#.GetFloat()
Ergebnis: gelesenes Float!
Erklärung: Liest un Float aus qui aktuell geöffneten Dossier un

Proc ?_File.GetFloat

    Déclarer temp1!, temp2#
    Faible temp2#, 8
    ~ReadFile(.hFile&, Addr(temp1!), 8, Addr(temp2#), 0)
    Dispose temp2#
    Retour temp1!

ENDPROC

Syntax: OBJEKT#.GetString()
Ergebnis: gelesene TextZeile comme Text$
Erklärung: Liest une String aus qui aktuell geöffneten Dossier,
jusqu'à un Fin Of Line marque trouvé wird. UNIX ou bien DOS

Proc ?_File.GetString

    Déclarer buffer#, bytesread&, Text$
    Faible buffer#, 1

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

        ~ReadFile(.hfile&, Addr(buffer#), 1, Addr(bytesread&), 0)
        Cas Byte(buffer#,0) = 0 : pause
        Cas Byte(buffer#,0) = 10 : pause
        Text$ = Text$ + Chr$(Byte(buffer#,0))

    Endwhile

    Dispose buffer#
    Retour Translate$(Text$, Chr$(13), »)

ENDPROC

Syntax: OBJEKT#.GetData(MemoryBuffer&, LengthToRead&)
Ergebnis: keins (gelesene Bytes befinden sich im MemoryBuffer&)
Beschreibung: Liest den le contenu qui aktuellen Dossier avec qui
angegebenen Longueur LengthToRead& (Anzahl trop einzulesender marque)
dans den angegebenen Speicherbereich MemoryBuffer& z.B. Adresse
einer Bereichsvariable

Proc ?_File.GetData

    Paramètres MemoryBuffer&, LengthToRead&
    Déclarer buffer#
    Faible buffer#, LengthToRead&
    ~ReadFile(.hFile&, MemoryBuffer&, LengthToRead&, Addr(buffer#), 0)
    Dispose buffer#

ENDPROC

###################
# données écrivons #
###################
qui ici folgenden Methoden marcher seulement,
si qui Dossier avec Schreib-Unterstützung ouvert wurde
(entweder avec Créer ou bien Open)
Syntax: OBJEKT#.PutByte(Wert&)
Ergebnis: keins
Erklärung: écrit une Byte-Wert dans qui aktuelle Dossier.

Proc ?_File.PutByte

    Paramètres Number&
    Déclarer Temp#
    Faible Temp#, 1
    ~WriteFile(.hFile&, Addr(Number&), 1, Temp#, 0)
    Dispose Temp#

ENDPROC

Syntax: OBJEKT#.PutWord(Wert&)
Ergebnis: keins
Erklärung: écrit une Word-Wert dans qui aktuelle Dossier.

Proc ?_File.PutWord

    Paramètres Number&
    Déclarer Temp#
    Faible Temp#, 2
    ~WriteFile(.hFile&, Addr(Number&), 2, Temp#, 0)
    Dispose Temp#

ENDPROC

Syntax: OBJEKT#.PutLong(Wert&)
Ergebnis: keins
Erklärung: écrit une Long-Wert dans qui aktuelle Dossier.

Proc ?_File.PutLong

    Paramètres Number&
    Déclarer Temp&
    ~WriteFile(.hFile&, Addr(Number&), 4, Addr(Temp&), 0)

ENDPROC

Syntax: OBJEKT#.PutFloat(Wert!)
Ergebnis: keins
Erklärung: écrit une Float-Wert dans qui aktuelle Dossier.

Proc ?_File.PutFloat

    Paramètres Number!
    Déclarer Temp!
    ~WriteFile(.hFile&, Addr(Number!), 8, Addr(Temp!), 0)

ENDPROC

Syntax: OBJEKT#.PutString(Text$)
Ergebnis: keins
Erklärung: écrit une String dans qui aktuelle Dossier

Proc ?_File.PutString

    Paramètres Text$
    Déclarer Temp#
    Faible Temp#, Len(Text$)
    ~WriteFile(.hFile&, Addr(Text$), Len(Text$), Addr(Temp#), 0)
    Dispose Temp#

ENDPROC

Syntax: OBJEKT#.PutStringCR(Text$)
Ergebnis: keins
Erklärung: écrit une String dans qui aktuelle Dossier
et fügt un EOL Zeilenumbruch hinzu

Proc ?_File.PutStringCR

    Paramètres Text$
    Déclarer Temp#
    Text$ = Text$ + Chr$(13) + Chr$(10)
    Faible Temp#, Len(Text$)
    ~WriteFile(.hFile&, Addr(Text$), Len(Text$), Addr(Temp#), 0)
    Dispose Temp#

ENDPROC

Syntax: OBJEKT#.PutData(MemoryBuffer&, LengthToWrite&)
Ergebnis: keins
Erklärung: écrit den le contenu des angegebenen Speicherbereichs
MemoryBuffer& avec einer Longueur de LengthToWrite& dans qui aktuelle Dossier.

Proc ?_File.PutData

    Paramètres MemoryBuffer&, LengthToWrite&
    Déclarer buffer#
    Faible buffer#, LengthToWrite&
    ~WriteFile(.hFile&, MemoryBuffer&, LengthToWrite&, Addr(buffer#), 0)
    Dispose buffer#

ENDPROC

############
# Diverses #
############
Syntax: OBJEKT#.Error()
Ergebnis: 0 ou bien 1
Erklärung: Gibt im Fehlerfall True (1) zurück
Z. Zt. wird seulement sur ~INVALID_HANDLE_VALUE chez
OBJEKT#.Créer(), OBJEKT#.Open() et OBJEKT#.Read() geprüft

Proc ?_File.Error

    Retour .FileError&

ENDPROC

Syntax: OBJEKT#.GetFile()
Ergebnis: Handle des Files
Erklärung: Hiermit peux aussi nachträglich cela
Handle qui aktuellen Dossier ermittelt volonté

Proc ?_File.GetFile

    Retour .hFile&

ENDPROC

Syntax: OBJEKT#.Eof()
Ergebnis: 0 ou bien 1
Erklärung: Hiermit ermitteln wir si cela Ende qui
Dossier erreicht wurde (1) ou bien pas (0)

Proc ?_File.Eof

    Déclarer Result&

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

        Result& = 0

    D'autre

        Result& = 1

    EndIf

    Retour Result&

ENDPROC

Syntax: OBJEKT#.Loc()
Ergebnis: Position
Erklärung: Gibt qui aktuelle aiguille-Position
dedans qui Dossier zurück

Proc ?_File.Loc

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

ENDPROC

Syntax: OBJEKT#.Seek(NewPosition&)
Ergebnis:
Beschreibung: Ändert den Lese/Schreib - aiguille dedans
qui Dossier sur qui angegebene NeuePosition. cette
paramètre muss dans Bytes angegeben volonté

Proc ?_File.Seek

    Paramètres NewPosition&
    Retour ~SetFilePointer(.hFile&, NewPosition&, 0, ~FILE_BEGIN)

ENDPROC

Syntax: OBJEKT#.Lof()
Ergebnis: FileSize
Erklärung: LOF steht pour Length Of File (Longueur qui Dossier).
Es gibt qui Longueur qui aktuellen Dossier zurück

Proc ?_File.Lof

    Retour ~GetFileSize(.hFile&, 0)

ENDPROC

Syntax: OBJEKT#.Version()
Ergebnis: Version
Erklärung: Gibt qui aktuelle Version
cette super comme String wieder

Proc ?_File.Version

    Retour "0.5.5.18"  tête-Version.l'an.mois.journée

ENDPROC


10 kB
Hochgeladen:18.05.2005
Downloadcounter188
Download
 
13.05.2005  
 



Hab qui Unit la fois geupdatet.

OBJEKT#.UseFile(hFile&) wurde entfernt. Machte malheureusement partiellement Probleme. Um plusieurs Fichiers trop nutzen, ist es maintenant erforderlich pour chacun Dossier une neue Instanz qui super anzulegen. Erhöht zwar quelque chose den Schreibaufwand, mais c'est quand même weiterhin possible presque beliebig viel Fichiers gleichzeitig trop Travailler.
cela Beispiel test3.prf wurde puis ajusté et juste encore fehlerbereinigt.
chez qui vorigen Version, sommes mir sur meinem System aucun faute aufgefallen, lediglich Rolf teilte mir cet avec. Tricolore oui aussi hoffentlich maintenant beseitigt. je suis alors sur cela Testen de euch angewiesen.

Salut
Thomas
 
18.05.2005  
 



Tricolore kurz getestet et funzt bien.

chez mir alors correct.

Um pas le nombre qui Downloads chaque la fois chez einem Update sur 0 trop mettons - nutze doch seulement den fouiller Knopf - et ensuite klicke sur neue Version.

Salve.
 
18.05.2005  
 



allô Thomas...

suis malheureusement (encore) ne...aucune XProfan Nutzer, c'est pourquoi werde je seulement la fois aussi pas testen.
Bezogen sur ~Generic_write | ~Generic_read pourrait dir mais là un Profanbug peut-être. la fois quelque chose Probleme bereiten. exposition la fois dans Bugnity pour...
 
18.05.2005  
 



[quote-part:1382f2518b=iF]Tricolore kurz getestet et funzt bien.

chez mir alors correct.[/quote-part:1382f2518b]cela Freud mich erstmal
[quote-part:1382f2518b=iF]
Um pas le nombre qui Downloads chaque la fois chez einem Update sur 0 trop mettons - nutze doch seulement den fouiller Knopf - et ensuite klicke sur neue Version.

Salve.[/quote-part:1382f2518b]
Tricolore wohl encore verkehrt gemacht

[quote-part:1382f2518b=AH]exposition la fois dans Bugnity pour...
[/quote-part:1382f2518b]Hab qui entsprechenden se mettre avec OU ajusté

Salut
Thomas
 
18.05.2005  
 




Rolf
Koch
Hi Thomas,

oui und dir maintenant!

Rolf
 
18.05.2005  
 



[quote-part:5439b97a2c]encore faux gemacht[/quote-part:5439b97a2c]vais doch simple la fois dans l'arène - là peux on testen so viel on voudrais.

Salve.
 
18.05.2005  
 




Michael
Wodrich
Nachfolgend une Funktion avec Blockpuffer.
Proc ?_file.getstring

    Déclarer Buffer#, Bytesread&, Text$, Text2$, FSize&, aktPos&, found&
    Faible Buffer#, 1024
    FSize& = ~Getfilesize(.Hfile&, 0)
    aktPos& = ~Setfilepointer(.Hfile&, 0, 0, ~File_current)

    Tandis que aktPos& < FSize&

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

        Si Found& <> -1

            Text2$ = String$(Buffer#,0)
            Text$ = Text$ + Text2$
            aktPos& = aktPos& + Len(Text2$) + 1
            ~Setfilepointer(.Hfile&, aktPos&, 0, ~File_Begin)
            Pause

        EndIf

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

        Si Found& <> -1

            Text2$ = Char$(Buffer#,0,Found&)
            Text$ = Text$ + Text2$
            aktPos& = aktPos& + Len(Text2$) + 1
            ~Setfilepointer(.Hfile&, aktPos&, 0, ~File_Begin)
            Pause

        EndIf

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

    Endwhile

    Dispose Buffer#
    Retour Translate$(Text$, Chr$(13), »)

ENDPROC

 
Programmieren, das spannendste Detektivspiel der Welt.
23.12.2005  
 



joli, cela sich doch encore einer pour cet Unit-intéressé
peut-être sollte on den Buffer sur 4096 erhöhen, seulement aus dem Grunde, weil qui Wert dans anderen mir bekannten Funktionen aussi pris wird. je denke la fois cela wird ne...aucune Zufall son.

Frohe Weihnacht
 
23.12.2005  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

7.604 Views

Untitledvor 0 min.
Gast.081519.08.2024
Member 862464120.04.2024
Paul Glatz16.09.2018
Georg Teles16.01.2016
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie