Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] Cantami o VB del palide Ini...

Scusate se rompo...
Ma devo scrivere e leggere su un file ini...
Scrivere scrivo, ma non riesco a leggere...
Praticamente il buffer della funzione di lettura va in overflow...
Qui di seguito vi posto la mia classe, cosě se riuscite a risolvermi il
problema la potete usare nei vostri progetti...
Imports System.Runtime.InteropServices
Namespace INI
Public Class ClassIni
#Region "Win32API"
Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringW" (ByVal lpAppName As String, ByVal lpKeyName As
String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal
nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String)
As Long
#End Region
#Region "CaricaIni"
Public Function CaricaIni(ByVal SezArg As String, ByVal Titolo As String,
ByVal Percorso As String)
Dim Buffer As String
Dim LonValueSize As Long
LonValueSize = GetPrivateProfileString(SezArg, Titolo, "-1", Buffer, 50,
Percorso)
If Val(Buffer) = -1 Then GoTo Errore
CaricaIni = Left(Buffer, LonValueSize)
Exit Function
Errore:
Microsoft.VisualBasic.MsgBox("File di configurazione mancante o alterato!",
MsgBoxStyle.Critical, "Errore")
Exit Function
End Function
#End Region
#Region "ScriviIni"
Public Sub ScriviIni(ByVal Section As String, ByVal Argo As String, ByVal
Variabile As String, ByVal File As String)
WritePrivateProfileString(Section, Argo, Variabile, File)
End Sub
#End Region
End Class
End Namespace

 alterato!", MsgBoxStyle.Critical, "Errore")
cosě, a occhio, il file ini non c'č. O almeno non č dove lo stai cercando.
Prova a postare il codice con cui costruisci la stringa "percorso"
--
Salutoni
Sergio

Le stringhe in 
VB.NET
 sono immutabili quindi la dll non può modificarti il
buffer, modifica la definizione della Declare della Getxxx sostituendo
ByVal lpReturnedString As String con  ByVal lpReturnedString As
System.Text.StringBuilder
Inoltre modifica Long con Int32 (o Integer...)
HTH
-- 
Corrado Cavalli [Microsoft MVP]
UGIdotNET - 
http://www.ugidotnet.org

Ma perché non usi le classi già fatte del Namespace
Microsoft.Win32.Registry? :)
                Ciao
                                                Allanon
--
- SPAMKILLER
 L'indirizzo delle risposte é 
itlangv...@michele.sytes.net
 LASCIATE il NOSPAM fa parte dell'indirizzo :-)
  Per superare le impostazioni di protezione antispam scrivete
  nel testo del messaggio la scritta "SPAMKILLER"
Scusate il disturbo, ma non posso più di pubblicità

                                                 Allanon
Perchè sputtanare il registro di windows non mi sembra una genialata ;) ,
inoltre sto Ini lo devo anche modificare a mano (a volte, per emergenza...),
quindi mi sembra più appropriato l'Ini... :)

Alessandro wrote:
Ehm era pElide: spero sia un typo! ;)


Cavolo č vero...;)


Ho provato, ma poi non riesce a convertire le String in
System.Text.StringBuilder e/o viceversa...


Il seguente , in 
VB.NET
, in lettura , da me funziona.
Provato per vedere la compatibilità tra VB6 e 
VB.NET
Conviene utilizzare , per i file di configurazione , il file di
configurazione dell'applicazione costruito in formato xml ,
app.config
Questo metodo , anche se funziona , è meglio sostituirlo.
*****Start code*********
 Private Sub LeggiVariabiliConnessione()
        Dim strServer, strDB, strUser, strPassword As String
        strServer = VBGetPrivateProfileString("CONFIG", "Server",
"path/FileAPI.INI")
        strDB = VBGetPrivateProfileString("CONFIG", "Database",
"path/FileAPI.INI")
        strUser = VBGetPrivateProfileString("CONFIG", "User",
"path/FileAPI.INI")
        strPassword = VBGetPrivateProfileString("CONFIG", "Password",
"path/FileAPI.INI")
    End Sub
 '**** Per Leggere in un file.ini **Rileva il valore della KEY
    Public Function VBGetPrivateProfileString(ByVal strSezione As String, _
    ByVal strKey As String, ByVal FileName As String) As String
        'Rileva il valore della KEY
        Dim KeyValue As String = Space(200)
        Dim Caratteri As Integer
        Caratteri = GetPrivateProfileStringByKeyName(strSezione, strKey, "",
KeyValue, 199, FileName)
        If Caratteri > 1 Then
            KeyValue = Left$(KeyValue, Caratteri)
        End If
        Return KeyValue
    End Function
 '**** Per Leggere in un file.ini **Rileva il valore della KEY
    Private Declare Function GetPrivateProfileStringByKeyName Lib "kernel32"
_
    Alias "GetPrivateProfileStringA" _
    (ByVal lpApplicationName As String, _
    ByVal pKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString As String, _
    ByVal nSize As Integer, _
    ByVal lpFileName As String) As Integer
********End code********
giuseppeD

E per scrivere???
Mi sai anche risolvere il problemino della String che ho sopra, per
favore???

SB->String
dim s as String=Stringbuilder.ToString
S->SB
dim s1 as String="Pippo"
dim sb as New System.Text.Stringbuilder(s)


 Mi sai anche risolvere il problemino della String che ho sopra,
1- Nel primo post hai scitto:
                          Scrivere scrivo
Comunque per scrivere , per aggiungere o modificare una Key si può
utilizzare:
*******Start code modifica file.ini********
 Public Sub AggiungiNuovaChiaveEvalore(ByVal strSezione As String, _
   ByVal strKey As String, ByVal strValoreKey As String, ByVal strFile As
String)
        'Aggiunge una nuova chiave e un valore nella sezione di un file.ini
        Dim i As Integer
        i = WritePrivateProfileStringByKeyName(strSezione, strKey,
strValoreKey, strFile)
        If i = 0 Then
            MsgBox("Modifica del file fallita ! " & vbCrLf & _
            "Verifica che if file non sia protetto.", vbExclamation,
"Operazione annullata .")
        End If
    End Sub
  'Aggiunge una nuova chiave e un valore nella sezione di un file.ini
    Private Declare Function WritePrivateProfileStringByKeyName _
    Lib "kernel32" Alias "WritePrivateProfileStringA" _
    (ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpString As String, _
    ByVal lplFileName As String) As Integer
**********End code**************
2- Per quanto riguarda la stringa che non riesci ad ottenere non capisco.
Es. ho i seguenti dati in un file.ini :
[POP3]
Host=Napoli
USERID=Milano
Password=Firenze
Servizio=filtroposta
Subject=Invio posta ordinaria o di urgenza
Archivio=Fine lavoro
se voglio conoscere il valore della key Subject , utilizzo come segue:
Dim strKey As String
strKey = VBGetPrivateProfileString("POP3", "Subject", "path/FileAPI.INI")
se aggiungo:
Console.WriteLine(strKey.Length & ";" & strKey)
ottengo:
34;Invio posta ordinaria o di urgenza
la stringa abbinata alla key viene letta.
Cosa manca o mi sfugge ?
giuseppeD

Funziona!!! Funziona!!!!!!!
Vi posto la classe cosě potete usarla pure voi...W l'OpenSource!!!!!!! ;)
Imports System.Runtime.InteropServices
Namespace INI
Public Class ClassIni
#Region "Win32API"
Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As
String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal
nSize As Integer, ByVal lpFileName As String) As Integer
Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String)
As Integer
#End Region
#Region "CaricaIni"
Public Function CaricaIni(ByVal SezArg As String, ByVal Titolo As String,
ByVal Percorso As String)
Dim Buffer As String = Space(50)
Dim LonValueSize As Integer
LonValueSize = GetPrivateProfileString(SezArg, Titolo, "", Buffer,
Len(Buffer), Percorso)
If LonValueSize > 0 Then
If Val(Buffer) = -1 Then GoTo Errore
Buffer = Left$(Buffer, LonValueSize)
Return Buffer
End If
