Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Il solito post sui .INI

Su qualche post vecchio di questo NG  ho trovato il seguente codice, che in
teoria, permette di Leggere/Scrivere su file INI.
Lo so che sul SC c'e' l'OCX gia' pronta, ma questo codice mi incuriosiva per
la sua assoluta' semplicita'.
Tanto semplice, pero', da non funzionare :-(
Su MSDN mi viene detto di aggiungere Microsoft Visual Basic Extensibility e
Microsoft Office Object Library.
Lo faccio ma continua a non funzionare.
Sono io che sbaglio qualcosa o tutto cio' non mi permette di gestire un .INI
qualsiasi ma solo il file VBADDIN.INI o, cmq, qualche altro INI di sistema e
basta ???
P.S: Io uso w2k pro, ma ho provato anche sotto W98 con gli stessi risultati
(o meglio: "NON risultati").
Grazie a chi mi rispondera' (e anche a tutti gli altri che di sentir parlare
di INI hanno la nausea)
Ciao.
Giorgio.
'---------------------------------------------------------------------------
-----------------------
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
   "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
    ByVal lpKeyName As Any, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long, _
    ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
   "WritePrivateProfileStringA" (ByVal lpApplicationName As String, _
    ByVal lpKeyName As Any, ByVal lpString As Any, _
    ByVal lpFileName As String) As Long
'---------------------------------------------------------------------------
-----------------------
Function GetDataFromIni(PsNomeIni As String, PsSezione As String, PsItem As
String, PsDefault As String) As String
'
' Legge il contenuto del .INI
' Parametri:
'
' PsNomeIni     =   Nome del .INI
' PsSezione     =   Sezione all'interno del .INI
' PsItem        =   Item all'interno della sezione del .INI
' PsDefault     =   Default da restituire se non si trova il contenuto del
.INI
'
Dim sBuffer As String
Dim lLunBuffer As Long
Dim lResult As Long
    sBuffer = String$(1024, Chr$(32))
    lLunBuffer = 1024
    lResult = GetPrivateProfileString(PsSezione, PsItem, PsDefault, sBuffer,
lLunBuffer, PsNomeIni)
    If lResult > 0 Then
        GetDataFromIni = Left$(sBuffer, lResult)
    Else
        GetDataFromIni = ""
    End If
End Function
Function PutDataInIni(PsNomeIni As String, PsSezione As String, PsItem As
String, PsValoreDaScrivere As String) As Long
'
' Scrive un valore nel .INI
' Parametri:
'
' PsNomeIni     =   Nome del .INI
' PsSezione     =   Sezione all'interno del .INI
' PsItem        =   Item all'interno della sezione del .INI
' PsDefault     =   Valore da scrivere nell'item
'
Dim sBuffer As String
Dim lLunBuffer As Long
Dim lResult As Long
    sBuffer = String$(1024, Chr$(32))
    lLunBuffer = 1024
    PutDataInIni = WritePrivateProfileString(PsSezione, PsItem,
PsValoreDaScrivere, PsNomeIni)
End Function
'---------------------------------------------------------------------------
-----------------------
Private Sub Command1_Click()
    Text1.Text = GetDataFromIni("ESEMPIO.INI", "SEZIONE1", "Item1", "NON
TROVATO")
End Sub
'---------------------------------------------------------------------------
-----------------------
Questo e' il file ESEMPIO.INI:
[SEZIONE1]
Item1="AAA"
Item2="BBB"
[SEZIONE2]
Item3="CCC"
Item4="DDD"
[SEZIONE3]
[SEZIONE4]
Item5="EEE"
'---------------------------------------------------------------------------
-----------------------
Ottengo sempre Text1.text = "NON TROVATO"

 End Sub
Il codice delle funzioni e' a posto ma devi passare il percorso *completo*
del file, per esempio:
Text1.Text = GetDataFromIni(App.Path & "\ESEMPIO.INI", "SEZIONE1", _
 "Item1", "NON TROVATO")
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett Brown

Hai ragione !!!!
Credevo che, essendo nella directory di lavoro, non fosse necessario il path
completo (e, fra l'altro, ero convinto di aver fatto la prova con App.Path,
ma evidentemente .... :*)    ).
Grazie 1.000.000.
Ciao.
"Luca Dormio" <lucaFAV...@tinFAVA.it> wrote in message
news:9o772h$2t4$1...@fe2.cs.interbusiness.it...


 teoria, permette di Leggere/Scrivere su file INI.
Arrivo in ritardo, vedo che ti hanno già risposto, ma non posso esimermi
visto che il codice che hai citato era mio. ;-)
In generale è buona norma scrivere i file INI e rileggerli sempre da codice,
se no si può incappare nel problema che ti è appena capitato.
Anche a me parecchio tempo fa era capitato di cercare di rileggere in una
directory locale un file "ini" che invece stava nella system, e da allora
uso sempre questo metodo.
Ciao
*Roby*

 wrote in message
news:AUHp7.1514$Bk.2...@news1.tin.it...

Hai ragione, ieri cercando di togliere il maledetto NIMDA dal pc di lavoro
(che grazie alla svista di qualche collega ha fatto M....A) ho trovato un
casino di file .INI (PIPPO.INI, PROVA.INI, PROVA2 ...) che avevo
inconsapevolmente creato in C:\WINNT con tutte le mie prove :-)
Cmq grazie.
Il codice che avevi postato mi piaceva proprio visto che non necessitava di
nessun OCX.
Ciao ciao.
Giorgio.