Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[VB6] INI-file probleem in W2000

h4xX0r
4 antwoorden
  • Ik heb al een tijdje geleden een programma (in VB6) gemaakt voor iemand.
    Tot dusver gaf het onder W98 geen problemen, echter….
    Geinstalleerd op een nieuwe pc met W2000 geeft het volgende probleem bij het maken van het INI-bestand.

    W98:(goed)
    Bij het schrijven van een sectie dmv [b:c46153660e]WritePrivateProfileSection [/b:c46153660e]wordt alle data onder deze sectie gewist en vervangen door de nieuwe instellingen die je wilt bewaren.

    W2000:(fout)
    De nieuwe instellingen worden er gewoon bijgeschreven ipv vervangen.


    Het gaat om een sectie die alleen waarden bevat (dus geen sleutels en '='-teken) zoals:

    [DOCUMENTEN]
    C:\Test\Brief01.txt
    C:\Test\Brief02.txt
    C:\Test\Brief03.txt


    Wanneer ik nu bijv. Brief10, Brief11 en Brief12 wil bewaren onder DOCUMENTEN, blijven onder W2000 Brief01, Brief02 en Brief 03 staan en worden ze onder W98 weggehaald (wat de bedoeling ook is).


    IS DIT PROBLEEM BIJ IEMAND BEKEND EN WAT KAN IK DOEN OM HET TOCH GOED TE LATEN VERLOPEN?

    bedankt voor de moeite

    ROB
  • Wat jij wilt is gewoon onjuist gebruik van INI files. In een INI file behoor je eigenlijk alleen maat "veld=waarde" regels te gebruiken. W2000 gaat er -terecht- van uit dat je de waardes aan een sectie wilt toevoegen, terwijk W98 -onterecht- de sectie verwijderd en een nieuwe sectie er voor terug schrijft.

    De fout zit hem dus in W98 en jij bent gaan profiteren van die fout…
    Wat je eigenlijk in je INI file behoort te hebben is dit:
    [DOCUMENTEN]
    Item1=C:\Test\Brief01.txt
    Item2=C:\Test\Brief02.txt
    Item3=C:\Test\Brief03.txt

    of dit:
    [DOCUMENTEN]
    C:\Test\Brief01.txt=0
    C:\Test\Brief02.txt=0
    C:\Test\Brief03.txt=0

    Maar dus niet wat jij probeert te produceren.
  • OK, dat klinkt overtuigend.

    Maar dat 'vervangen' van de hele sectie komt juist mooi uit in dit geval, omdat de beheerder van mijn programma in een beheermenu een aantal documenten (het aantal varieert) kan selecteren die uiteindelijk getoond gaan worden aan de eindgebruikers.

    Het aantal 'sleutels' in deze sectie varieert dus regelmatig.

    Hoe zou ik dat 'legaal' kunnen oplossen?
  • Simpel…Voeg gewoon =0 toe aan alle regels binnen de sectie. Dat zou volgens mij het probleem kunnen oplossen. Maar om te voorkomen dat oude waardes blijven staan binnen de sectie moet je dus eerst de sectie verwijderen voordat je hem opnieuw toevoegt.
    Het inlezen is ook redelijk eenvoudig aangezien je alleen de veldnamen inleest door GetProfileString of GetPrivateProfileString te gebruiken.

    Verder wil ik nog opmerken dat het gebruik van INI files een tikkeltje verouderd raakt. Microsoft zelf gaat steeds vaker XML bestanden gebruiken voor het opslaan van settings en daarnaast is de registry ook een erg populaire plek. Daarnaast maakt veel software ook gebruik van hun eigen bestands-formaat voor het opslaan van gegevens, vaak in binaire vorm. En dan met een extra editor erbij die dit binaire bestandje inleest en mogelijkheden biedt om via een mooie GUI de nnodige aanpassingen te maken.

    Als je een beetje modern wilt blijven, overweeg dan om je instellingen in een XML bestand op te slaan… :)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.