Leggere e scrivere file INI con visual basic .NET

Un file ini è un formato di teso virtuale che serve per salvare le impostazioni di un programma senza usare database e dintorni. Adesso vi mostrerò come usare questo formato di file per salvare delle impostazioni con un programma in visual basic.

Mettete queste righe subito dopo l’ apertura della classe.

Private Declare Auto Function GetPrivateProfileString Lib “kernel32.dll” (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

Private Declare Auto Function WritePrivateProfileString Lib “kernel32.dll” (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer

Friend Function IniRead(ByVal Filename As String, ByVal Section As String, ByVal Key As String, Optional ByVal lpDefault As String = “”, Optional ByVal bRaiseError As Boolean = False) As String

Dim RetVal As String = New String(” “, 255)

Dim LenResult As Integer

Dim ErrString As String

LenResult = GetPrivateProfileString(Section, Key, lpDefault, RetVal, RetVal.Length, Filename)

If LenResult = 0 AndAlso bRaiseError Then

If Not (System.IO.File.Exists(Filename)) Then

ErrString = “Impossibile aprire il file INI” & Filename

Else

ErrString = “La sezione o la chiave sono errate oppure l’accesso al file non è consentito”

End If

Throw New Exception(ErrString)

End If

Return RetVal.Substring(0, LenResult)

End Function

Friend Function IniWrite(ByVal Filename As String, ByVal Section As String, ByVal Key As String, ByVal Value As String, Optional ByVal bRaiseError As Boolean = False) As Boolean

Dim LenResult As Integer

Dim ErrString As String

LenResult = WritePrivateProfileString(Section, Key, Value, Filename)

If LenResult = 0 And bRaiseError Then

If Not (System.IO.File.Exists(Filename)) Then

ErrString = “Impossibile aprire il file INI” & Filename

Else

ErrString = “Accesso al file non consentito”

End If

Throw New Exception(ErrString)

End If

Return IIf(LenResult = 0, False, True)

End

End Function

Ok, vediamo come utilizzarle.

Per scrivere dentro un file ini usiamo:

IniWrite(“fileini.ini”, “sezione”, “chiave”, “valore”)

Il risultato di questa funzione sarà un file ini chiamato “fileini.ini” (senza virgole) contenente il seguente testo:

[sezione]

chiave=valore

Adesso per leggere il contenuto di un file ini e passarlo ad una variabile facciamo così:

dim lettura as string

lettura = IniRead(“fileini.ini”, “sezione”, “chiave”)

msgbox(lettura)

Ecco. Appena finito di eseguire questo codice vi verrà stampato un msg box contenente il valore di quella specifica chiave.

Il seguente codice è valido per Visual Basic 2005, 2008, 2010 (testato con tutti e tre)

Non esitate a commentare se non vi è chiaro qualcosa.

Al prossimo articolo 😛

By blackwolf96

Annunci

18 risposte a “Leggere e scrivere file INI con visual basic .NET

  1. Ciao,
    ho trovato questo articolo molto utile e ho provato subito a inserire il codice un programma cn vb.net 2010.
    Il fatto e che quando provo a eseguirlo non mi genera nessun errore ma neanche nessun file.
    Bisogna fare qualcosaltro per farlo funzionare?

  2. Ciao Lorenzo 😀
    Per scrivere in un file ini , oltre ad inserire le funzioni nel codice devi usare questo comando:

    IniWrite(“c:\fileini.ini”, “sezione”, “chiave”, “valore”)

    Se il file ini non viene creato ne crea uno nuovo.
    Se hai fatto così assicurati di aver scritto il percorso per intero (per esempio “c:\fileini.ini”) e non scrivere solo “fileini.ini”.

    ciao 🙂

  3. ciao , scusatemi, sono nuovo della programmazione,
    voorrei sapere per favore, dove devo inserire questo codice per salvare le mie preferenze, lo devo mettere nel form??

    io utilizzo studio express versione vb.net

  4. Ciao Guido :D, il codice per salvare delle preferenze, lo devi mettere nell’ evento click di un bottone qualsiasi. Crea un bottone, fai doppio click su di esso e inserisci il codice per salvare le preferenze nell’ editor.

  5. Grazie sei gentilissimo, mi sto approcciando al vb da pochissimo, posso approfittare per chiederti una cosa?

    ma la libreia Kernell32 la devo inserire nel progetto?

    poi volevo chiederti anche un tuo consiglio,

    ho 2 checkbox vorrei che selezionandone 1 vengano caricato
    nella combobox i valori ( vorrei far caricare la combobox da file di testo)associati a ciscun checkbox.

    tu mi puoi consigliare cosa fare?

    grazie.

  6. Ciao Grazie per l’esempio, io vorrei popolare una combobox al posto di una list box, devo sostituire il nome da list a combo?

    poi ho visto che hai lasciato 2 caselle di testo vuote, quelle a cosa servono?

    Scusa se ti tedio, ma più capisco e più posso buttarmi da solo, grazie ancora. ciao

  7. Sisi puoi sostituire il nome da list a combo, non ci avevo fatto caso che avevi scritto combobox asd.
    Le caselle di testo servono a far vedere quale elemento hai selezionato dalla listbox. Se hai selezionato “test1” nella textbox ci sarà il testo “test1” e così via…

    Nn preoccuparti 🙂

  8. Grazie per la pazienza, ma perchè se faccio delle modifiche, non me le vede? cioè aggiungo le combobox, vado in anteprima, ma non mi fa vedere quello che ho aggiunto…

    Scusami io ne approfitto, per chiederti ancora info,

    vorrei aggiungere dei check e dargli un valore, che sarebbero delle password, in modo tale che mettendo il check
    quel valore va a completare una riga di comando dos che poi lancerei direttamente con un bottone.

    dimmi quando esagero con le domande….

    ciao e Grazie

  9. ciao, ho provato ad utilizzare questo codice con visual studio 2010 su un sistema a 64 bit, ma la funzione di lettura non mi restituisce alcun valore.
    il file esiste ed ho accesso, il mio dubbio è quindi limitato al fatto dei 64 bit…hai qualche suggerimento?

    grazie!

    Piter

  10. Ciao Andrea, non so se esista qualche api predisposta per fare quello da te scritto, ma potresti utilizzare un altro metodo: enumerare le righe del file ini, se è contenuto il testo “[Tua sezione]”, allora passi le righe successive ad un altra funzione che si occuperà di splittare le suddette righe. Puoi splittare le stringhe tramite la funzione .Split(“Divisore”). Come risultato otterrai un array di stringhe del quale, il primo elemento (0) è la tua chiave.

    Spero di essere stato chiaro, se così non fosse avvertimi che magari ti scrivo io il codice 😀
    Ciao,
    BlackWolf

  11. Salve anche io sono nuovo di visual basic (ho sempre programmato con il caro vecchio VBA di Access)

    a me funziona tutto ma la variabile bRaiseError come entra in gioco???

    Grazie MIlle

  12. Scusate come non detto…

    Trovato serve per segnalare errore quando manca il file o una chiave nel ini

    Scusate di nuovo

  13. Carine queste funzioni, mi resta solamente un dubbio.
    Come faccio a sovrascrivere/aggiornare un valore già inserito ovvero:

    Per esempio, nel mio progetto ho il file .ini contenente
    [sezione1]
    chiave1=valore1

    se voglio modificare il valore da “valore1” a “valoreN” come faccio?
    utilizzando:
    IniWrite(“fileini.ini”, “sezione1”, “chiave1”, “valoreN”)

    il risultato è il seguente:
    [sezione1]
    chiave1=valore1
    [sezione1]
    chiave1=valoreN

    mentre io vorrei ottenere questo file:
    [sezione1]
    chiave1=valoreN

  14. When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each time a
    comment is added I get three e-mails with the same comment.
    Is there any way you can remove people from that service?

    Appreciate it!