Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Leggere e scrivere file .INI

Nonostante in VB.Net sia fortemente consigliato l'utilizzo dell'ormai universale formato XML per memorizzare le informazioni dei nostri programmi, può pur sempre tornare utile (non solo per i più affezionati), poter gestire in modo semplice le informazioni memorizzate nei file .INI
Per far questo ci appoggeremo a due API, la GetPrivateProfileString e la WritePrivateProfileString.

 Ecco il codice:

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
'***********************************************************
' Func: IniRead SB 20080520
' Desc: Legge il valore di una Chiave di una Sezione precisa del file .Ini
' Par : FileName Nome e percorso completo del file .INI
' Section Sezione del file .Ini contenente la chiave
' Key Chiave del file .Ini da leggere
' [ldDefault] Valore di default in caso di lettura non riuscita
' [bRaiseError] Boolean. Se true viene generata un'eccezione in caso d'errore
' Ret : String Valore stringa letto.
' Note:
'***********************************************************
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 trovare il file " & Filename
    Else
        ErrString = "Impossibile eseguire l'operazione: 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
'***********************************************************
' Func: IniWrite SB 20080520
' Desc: Legge il valore di una Chiave di una Sezione precisa del file .Ini
' Par : FileName Nome e percorso completo del file .INI
' Section Sezione del file .Ini contenente la chiave
' Key Chiave del file .Ini da scrivere
' Value Stringa da assegnare alla chiave.
' [bRaiseError] Boolean. Se true viene generata un'eccezione in caso d'errore
' Ret : String Valore stringa letto.
' Note:
'***********************************************************
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 trovare il file " & Filename
    Else
        ErrString = "Impossibile eseguire l'operazione: accesso al file non consentito"
    End If
    Throw New Exception(ErrString)
End If
Return IIf(LenResult = 0, False, True)

End
Function 

 Ecco il codice per poter utilizzare le stesse funzioni in VB6.

Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA"  (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 Long

Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long

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
'***********************************************************
' Func: IniRead SB 20080520
' Desc: Legge il valore di una Chiave di una Sezione precisa del file .Ini
' Par : FileName Nome e percorso completo del file .INI
' Section Sezione del file .Ini contenente la chiave
' Key Chiave del file .Ini da leggere
' [ldDefault] Valore di default in caso di lettura non riuscita
' [bRaiseError] Boolean. Se true viene generata un'eccezione in caso d'errore
' Ret : String Valore stringa letto.
' Note:
'***********************************************************
Dim
RetVal As String
Dim LenResult As Integer
Dim ErrString As String
    RetVal =Space(255)
   
LenResult = GetPrivateProfileString(Section, Key, lpDefault, RetVal, RetVal.Length, Filename)
    If LenResult = 0 And bRaiseError Then
        ErrString = "Impossibile eseguire l'operazione: la sezione o la chiave sono errate oppure l'accesso al file non è consentito"
        Err.Raise Err.Raise(9998, Nothing,  ErrString)   
    End If
IniRead = Mid(RetVal, 1, 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
'***********************************************************
' Func: IniWrite SB 20080520
' Desc: Legge il valore di una Chiave di una Sezione precisa del file .Ini
' Par : FileName Nome e percorso completo del file .INI
' Section Sezione del file .Ini contenente la chiave
' Key Chiave del file .Ini da scrivere
' Value Stringa da assegnare alla chiave.
' [bRaiseError] Boolean. Se true viene generata un'eccezione in caso d'errore
' Ret : String Valore stringa letto.
' Note:
'***********************************************************
Dim LenResult As Integer
Dim ErrString As String
    LenResult = WritePrivateProfileString(Section, Key, Value, Filename)
    If LenResult = 0 And bRaiseError Then
        ErrString = "Impossibile eseguire l'operazione: la sezione o la chiave sono errate oppure l'accesso al file non è consentito"
        Err.Raise Err.Raise(9999, Nothing,  ErrString)   
    End If
IniWrite = IIf(LenResult = 0, False, True)

End
Function 


Categoria: VB.Net
mercoledì, 21 mag 2008 Ore. 15.16
Statistiche
  • Views Home Page: 111.336
  • Views Posts: 567.341
  • Views Gallerie: 116.145
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003