none
Edição arquivo .ini RRS feed

  • Pergunta

  • Bom dia!

    Gostaria de saber uma forma para edição de arquivo .ini. Como deletar seções específicas e as entradas das seções.

    Muito obrigado.

    sexta-feira, 2 de setembro de 2016 13:43

Respostas

  • Usando a API, ficaria assim:

    Imports System.Runtime.InteropServices
    
    Module Module1
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileSection(ByVal lpAppName As String, ByVal lpString As IntPtr, ByVal lpFileName As String) As Boolean
        End Function
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileString(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Boolean
        End Function
    
        Sub Main()
            res = WritePrivateProfileSection("Carga", "ESCALA4",Nothing, "c:\path\seu_arquivo.ini")
        End Sub
    
    End Module


    a documentaçao do metodo WritePrivateProfileString esta aqui:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms725501(v=vs.85).aspx

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 2 de setembro de 2016 17:44
    Moderador

Todas as Respostas

  • Creio que voce se refere a ediçao do arquivo via código, certo? Normalmente um ini é editado manualmente, mas voce pode fazer isso via codigo usando bibliotecas como o SharpConfig:

    https://sharpconfig.codeplex.com/

    Nativamente o .NET só possui metodos para gerenciar os arquivos .Config, que sao na verdade XMLs.

    Para gerenciar .INI voce vai ter que trabalhar com arquivos textos ou usar as APIs windows para realizar esse trabalho. Bibliotecas como o sharpconfig facilitam o trabalho

    aqui um exemplo de uso das APIs windows, caso queira seguir esse caminho:

    Public Class IniFile
     ' API functions
     Private Declare Ansi Function GetPrivateProfileString _
       Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
       (ByVal lpApplicationName As String, _
       ByVal lpKeyName As String, ByVal lpDefault As String, _
       ByVal lpReturnedString As System.Text.StringBuilder, _
       ByVal nSize As Integer, ByVal lpFileName As String) _
       As Integer
     Private Declare Ansi Function WritePrivateProfileString _
       Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
       (ByVal lpApplicationName As String, _
       ByVal lpKeyName As String, ByVal lpString As String, _
       ByVal lpFileName As String) As Integer
     Private Declare Ansi Function GetPrivateProfileInt _
       Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
       (ByVal lpApplicationName As String, _
       ByVal lpKeyName As String, ByVal nDefault As Integer, _
       ByVal lpFileName As String) As Integer
     Private Declare Ansi Function FlushPrivateProfileString _
       Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
       (ByVal lpApplicationName As Integer, _
       ByVal lpKeyName As Integer, ByVal lpString As Integer, _
       ByVal lpFileName As String) As Integer
     Dim strFilename As String
    
     ' Constructor, accepting a filename
     Public Sub New(ByVal Filename As String)
       strFilename = Filename
     End Sub
    
     ' Read-only filename property
     ReadOnly Property FileName() As String
       Get
           Return strFilename
       End Get
     End Property
    
     Public Function GetString(ByVal Section As String, _
       ByVal Key As String, ByVal [Default] As String) As String
       ' Returns a string from your INI file
       Dim intCharCount As Integer
       Dim objResult As New System.Text.StringBuilder(256)
       intCharCount = GetPrivateProfileString(Section, Key, _
          [Default], objResult, objResult.Capacity, strFilename)
       If intCharCount > 0 Then GetString = _
          Left(objResult.ToString, intCharCount)
     End Function
    
     Public Function GetInteger(ByVal Section As String, _
       ByVal Key As String, ByVal [Default] As Integer) As Integer
       ' Returns an integer from your INI file
       Return GetPrivateProfileInt(Section, Key, _
          [Default], strFilename)
     End Function
    
     Public Function GetBoolean(ByVal Section As String, _
       ByVal Key As String, ByVal [Default] As Boolean) As Boolean
       ' Returns a boolean from your INI file
       Return (GetPrivateProfileInt(Section, Key, _
          CInt([Default]), strFilename) = 1)
     End Function
    
     Public Sub WriteString(ByVal Section As String, _
       ByVal Key As String, ByVal Value As String)
       ' Writes a string to your INI file
       WritePrivateProfileString(Section, Key, Value, strFilename)
       Flush()
     End Sub
    
     Public Sub WriteInteger(ByVal Section As String, _
       ByVal Key As String, ByVal Value As Integer)
       ' Writes an integer to your INI file
       WriteString(Section, Key, CStr(Value))
       Flush()
     End Sub
    
     Public Sub WriteBoolean(ByVal Section As String, _
       ByVal Key As String, ByVal Value As Boolean)
       ' Writes a boolean to your INI file
       WriteString(Section, Key, CStr(CInt(Value)))
       Flush()
     End Sub
    
     Private Sub Flush()
       ' Stores all the cached changes to your INI file
       FlushPrivateProfileString(0, 0, 0, strFilename)
     End Sub
    
    End Class
    
    
    
    
    'exemplo de uso
    Dim objIniFile As New IniFile("c:\data.ini")
    objIniFile.WriteString("Settings", "ClockTime", "12:59")
    Dim strData As String = _
        objIniFile.GetString("Settings", "ClockTime", "(none)")

    fonte:http://stackoverflow.com/questions/30576143/how-to-update-value-in-ini-file-in-vb-net

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 2 de setembro de 2016 14:34
    Moderador
  • Obrigado pela resposta, porém já estou usando isto. O que eu quero saber é como deletar uma linha específica, por exemplo uma entrada que não desejo mais utilizar.
    sexta-feira, 2 de setembro de 2016 14:42
  • Voce se refere ao SharpConfig ou APIs?

    Se for via API, o codigo abaixo elimina uma sessao inteira:

    Imports System.Runtime.InteropServices
    
    Module Module1
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileSection(ByVal lpAppName As String, ByVal lpString As IntPtr, ByVal lpFileName As String) As Boolean
        End Function
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileString(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Boolean
        End Function
    
        Sub Main()
            res = WritePrivateProfileSection("Test", IntPtr.Zero, "D:\test.ini")
        End Sub
    
    End Module

    se for via sharpconfig, existe o metodo Remove

    publicvoidRemove(Section section)


    Para que fique mais claro para nós, poste seu INI e o que voce quer remover.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    sexta-feira, 2 de setembro de 2016 14:50
    Moderador
  • Por exemplo:

    [Carga]
    ESCALA1=1000
    ESCALA2=5000
    ESCALA3=10000
    ESCALA4=30000
    ESCALA5=50000
    ESCALA6=100000

    Nesta seção, como eu faria para apagar apenas a entrada 'ESCALA4=30000'?

    sexta-feira, 2 de setembro de 2016 16:40
  • Usando a API, ficaria assim:

    Imports System.Runtime.InteropServices
    
    Module Module1
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileSection(ByVal lpAppName As String, ByVal lpString As IntPtr, ByVal lpFileName As String) As Boolean
        End Function
        <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Function WritePrivateProfileString(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Boolean
        End Function
    
        Sub Main()
            res = WritePrivateProfileSection("Carga", "ESCALA4",Nothing, "c:\path\seu_arquivo.ini")
        End Sub
    
    End Module


    a documentaçao do metodo WritePrivateProfileString esta aqui:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms725501(v=vs.85).aspx

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 2 de setembro de 2016 17:44
    Moderador
  • Bom dia,

    Devido a falta de resposta do usuário
    essa thread está sendo fechada.
    Se o problema ainda estiver ocorrendo,
    favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 5 de setembro de 2016 14:02
    Moderador