Standard Dateisystem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Liebe Community ( Naja fast immer Lieb :P xD )


    Ich erkläre euch mal wie man das Standard Datei System in Pawn nutzt , erst einmal fangen wir an mit dem Öffnen eines Datei Streams...


    Erstellen wir eine Variable für die Datei, darin wird die Stream ID gespeichert bzw. die Zugriffs Nummer, damit das Datei System alle Infos hat:
    new File:datei;


    Nun greifen wir mal auf die Datei zu ...
    datei = fopen("Dateipfad",zugriffs_typ);


    • Der Dateipfad ist ein Standard Pfad zur Datei, kennt ihr sicherlich alle :D
    • Der Zugriffs Typ ist die Zugriffs Methode auf die Datei hier mal eine Liste der Typen
    • io_write - ( Dieser Typ legt fest das die Datei beschrieben wird & gleichzeitig wenn sie nicht existiert erstellt wird zudem löscht dieser Typ den alten Inhalt )
    • io_read ( Dieser Typ ließt den Inhalt aus bzw. legt den Typ so fest das nur gelesen werden kann )
    • io_append ( Dieser Typ legt fest das die Datei nicht gelöscht wird sondern das man die alten Inhalte behält und die neuen dazu geschrieben werden)
    • io_readwrite ( Dieser Typ ließt eine Datei aus und kann sich gleichzeitig beschreiben & erstellt eine neue Datei falls die angegebene Datei nicht existiert )


    So nun möchte ich euch erklären wie man eine Datei ließt & sie beschreibt ( Je nach Zugriffs Typ )


    Damit schreibt ihr einen Text in die Datei je nach Zugriffs Typ , bitte drauf achten ( Siehe io_write , io_append , io_readwrite )
    fwrite(datei_variable,"Text");


    • Datei Variable ist die Datei Nummer die ihr Stream ID nennen könnt , ihr wisst was ich meine siehe Anfang
    • Und dann den Text den ihr schreiben wollt
    • Achtung : Diese Funktion schreibt keine neue Linie wenn ihr den Zugriff auf Append stellt sondern schreibt gleich dahinter weiter um neue Linie zu erstellen formatiert \r\n hinein sollte genügen ;) , das \r\n macht es möglich das wirklich eine neue Linie gestartet wird ansonsten hättet ihr nur sogenannte Kästchen Trennungen, das Prinzip ist wie bei VB wer es kennt die Länge einer neuen Linie hat immer 2 Zeichen einmal Char 10 & Char 13




    fread(datei_variable,string_var_wo_es_rein_soll,maximale_string_größe,packed_string);


    • Datei Variable ist die Datei Nummer die ihr Stream ID nennen könnt , ihr wisst was ich meine siehe Anfang
    • StringVar , wo soll der gelesene Inhalt rein ? Bitte gebt eine Text Variable an
    • Maximale Größe des Inhalts ( Gebt ihr 5 an aber habt in der Linie der Datei 7 Zeichen so werden nur 5 Zeichen gelesen)
    • Ist es ein packed String ( true/false ) ( Packed Strings = 1 Byte , normale = 4 Bytes )
    • Eigenschaft : Diese Funktion ließt immer eine Linie und dann immer die nächste , sie fängt erst wieder bei 0 an wenn ihr den Stream schließt


    Ihr müsst den Stream auch schließen damit das Programm von der Datei los lässt " ", dazu tut ihr folgendes...
    fclose(datei_variable);


    • Datei Variable ist die Datei Nummer die ihr Stream ID nennen könnt , ihr wisst was ich meine siehe Anfang


    Hier ein kleiner Tipp zum auslesen aller Linien + Erfassung für das Ende der Datei

    new File:datei = fopen("datei.endung",io_append),line[255];
    while(fread(datei,line))
    {
    // Aktion
    }
    fclose(datei);


    Und hier mal ein normaler Stream ^^


    new File:datei = fopen("Datei.endung",io_write);
    fwrite(datei,"dein text");
    fclose(datei);



    Sonstige Funktionen



    fexist("Dateiname");

    • Diese Funktion fragt ab ob die Datei existiert


    fremove("Dateiname");

    • Diese Funktion löscht eine Datei


    flength(datei_variable);

    • Gibt die Größe der Datei zurück


    fmatch("Dateiname","String",Anzahl_Zeichen_Die_Gesucht_werden_sollen);


    • Dateiname ist klar
    • Nach was soll er im Dateinamen suchen ? Was soll enthalten sein ?
    • Zeichenlänge die gesucht wird



    Ich wünsche euch viel Spaß & ich hoffe es hilft euch ein bisschen

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    3 Mal editiert, zuletzt von BlackFoX ()

  • Kleine Frage BFX:

    • Maximale Größe des Inhalts ( Gebt ihr 5 an aber habt in der Linie der Datei 7 Zeichen so werden nur 5 Zeichen gelesen)
    • Ist es ein packed String ( true/false ) ( Packed Strings = 1 Byte , normale = 4 Bytes )


    Ich dachte immer, dass bei der 5 die Nullterminierung dabei ist , sprich char 0,1,2,3 + "\0" ?
    Ist es nicht Packed string: 1 Char = 1 Byte ; normal: 1 Char = 4 Bytes?



    Sonst wirklich nice :thumbup:

  • Goldkiller : Ich glaube ich hatte da sowas erwähnt, war sogar Rot Markier ^^


    KornChief : Das mit der Maximalen Länge war so gemeint das er bis zu einer Maximalen Länge ließt , gebe ich eine 5 an so ließt er nur bis zur 5. Stelle dabei ist klar das Programmiersprachen mit dem Zahlen System bei der 0 Anfangen also 01234 = 5 Zahlen/Zeichen


    Zu der Byte Größe , habe ich doch gesagt , bitte genauer Lesen ;)


    Ansonsten danke für das Nette Feedback

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Da hast du aber nur was von \n geschrieben.

    Zitat

    A little explanation about the escape codes; the "\n" will begin a new line, and the \r makes sure it starts at the beginning, not somewhere in the middle of a line, so it wont end up like

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das Standart File System ist um LÄNGEN schneller als Dini, da es direkt auf native Functions zugreift, und somit nicht (wie Dini) auf custom Functions zugreift.
    Außerdem benutzt Dini zum Teil übertriebene String Sizes, unnötige Functionaufrufe und ist sowieso veraltet.


    Wenn du es wirklich einfach haben willst, benutz djson oder SII.

  • DJSon & SII sind deshalb schneller da sie mit einer Cache arbeiten, das heißt der Inhalt wird
    in Variablen bzw. im Zwischenspeicher festgehalten & bearbeitet nach dem Beenden der Aktion bzw. beenden
    der Speicherungen aufrufe wird die Cache bereinigt & der Datei Zugriff geschlossen , wobei ich eher auf DJson zugreifen
    würde da ich das System schon etwas besser finde zudem bietet es viele Optionen.


    Naja wenn man es einfach haben will kann man auch das Normale Dateisystem + Split/strtok/Getstr nutzen , dazu würde ich einfach Linie
    für Linie auslesen diese zerlegen und daraus laden , beim Speichern geht ihr die Variablen durch in denen es geladen wurde formatiert einen Text
    zurecht & speichert ihn , hängt am besten \n oder \r\n hinten dran so das beim Laden auch Ordnungsgemäß geladen werden kann ,
    eine wirklich sehr einfach Methode

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Also ich nutze kein DINI und habe eigentlich keine Probleme mit diesem Standardsystem


    Ein was finde ich schade, dass man nicht eine bestimmte Variable ändern kann, ohne alles erstmal abzufragen.


    Bsp:
    Einer ist offline und man will nur ein Wert ändern
    >>> alles runterholen ändern dann neu speichern... Das finde ich blöd ^^

  • Jeder kann mit dem System arbeiten welches er bevorzugt aber wie DMA bereits sagte es hängt davon ab wie oft man auf Externe Daten zugreift deswegen
    ist eine Cache Speicherung die bessere Methode , sprich man lädt es in die Variable & ändert die Werte darin zum Ende kann man diese dann komplette abspeichern ,
    entweder es sind Array Werte sprich Reihenfolge dann kann man schleifen nutzen oder man speichert einzel Werte und speichert diese Einzeln ab aber ist irrelevannt
    Hauptsache man greift nicht nach jeder Aktion auf die Datei zurück

    Mfg. BlackFoX_UD_ alias [BFX]Explosion