Avatar billede -bomann- Nybegynder
18. maj 2004 - 18:12 Der er 4 kommentarer

Hvordan kan man omgå 64KB begrænsningen i ini-filer under Win9X?

Jeg har prøvet BigIni og IniFiles32 fra Torry.net, men de afviger desværre fra Delphi's IniFiles på flere vitale punkter.
Kan man eventuel bruge en senere version af IniFiles (min applikation er Delphi3 og kan ikke løftes) f.eks. D4, D5 eller fungerer de som D3!?
Det optimale ville helt klart være hvis Borland havde lavet en IniFiles.pas der håndterer problemet!!?? Hvis dette ikke er tilfældet, hvad kan man så gøre!!?
Avatar billede mysitesolution Nybegynder
18. maj 2004 - 18:57 #1
Nu ved jeg ikke hvor hardcore du er til delphi, men du kunne evt. lave en selv? Det burde ikke være så svært igen...Lavede engang en del af den, fordi jeg ville have at jeg selv havde lavet ALT i mit program :)
Avatar billede -bomann- Nybegynder
18. maj 2004 - 21:08 #2
Jeg ved godt at IniFiles ikke er kompliceret som så, men desværre er det lidt et spørgsmål om tid. Desuden kan man ikke lave det uden at indføre en fejl eller to. Det oplevede jeg f.eks. med IniFiles32 hvor jeg rettede flere fejl - til sidst måtte jeg opgive, da det gik for meget ud over test butikkerne :( Min ide med at bruge en senere IniFiles.pas dur altså ikke eller??? Andre forslag???
Avatar billede hrc Mester
18. maj 2004 - 21:51 #3
Hvis du har data i > 64kb størrelsen vil jeg anbefale dig at lave dig eget gemme-format. Det må blive koloenormt sløvt når tekstfiler i den størrelse, skal håndteres.

Hvad med at splitte det op, eller simpelthen streame det til en binær fil i stedet?
Avatar billede hrc Mester
21. maj 2004 - 23:22 #4
Det kan i øvrigt ikke være så svært at lave en effektiv ini-fil-implemtation selv. Du kan enten lave en liste der indeholder sektions-hovederne. Denne liste kunne man sortere og ved hver sektion kunne man have en linie-tæller så man hurtigt kunne komme ned til det rette sted i filen.

Alternativt, som er lynhurtig men optager ram: Læs hele skidtet ind i hukommelsen og leg med det der indtil det skal skrives til disk igen. Her tænker jeg igen på en Header-liste der peger på en data-lister som indeholder data for hver header.

Hvis man ikke bruger de (sløve) varianter betyder det, at man må oprette dataklasser for strenge, heltal, flydende decimaltal, dato, tid, datotid, boolsk

type
  TValue = class
  private
    fData : variant;
  public
    constructor Create(const aValueName : string; const aValue : variant);
    property Name : string read fName;
    property Value : variant read fData write fData;
    procedure WriteData(const aFilePointer : textfile);
  end;

  THeader = class(TObjectList)
  private
  public
    constructor Create(const aHeaderName : string);
    property Values[aValueName : string] : TValue read GetValueByName;
    procedure ReadData(const aFilePointer : textfile);
    procedure WriteData(const aFilePointer : textfile);
  end;

  THeaders = class(TObjectList)
  private
  public
    constructor Create(const aFileName : string);
    destructor Destroy; override;
    function ReadData : boolean;
    function WriteData : boolean;
    property Headers[aIndexStr : string] : THeader read GetHeaderByStr; default;
  end;

Headers indeholder Headere der indeholder værdier. Bare et alternativ til at skulle lave noget i binære filer. Hvis du kan bruge den idé, så arbejder jeg videre på den i morgen (en sjov lille opgave)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester