none
Usar OpenFileDialog para abrir arquivo.ini RRS feed

  • Pergunta

  • Olá pessoal! Tudo bem com vocês? Como faço para abrir um arquivo de configuração ini com OpenFileDialog e depois salvar com SaveFileDialog. Vejam o código usando diretório:

    Label1.Text = lerINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização")
    
            escreveINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização", "Texto")

    Quero trocar "C:\Users\Hawer\Desktop\arquivo.ini" por OpenFileDialog e SaveFileDialog. Obrigado!

    quarta-feira, 20 de novembro de 2013 18:15

Respostas

  • Então, passo 1 é escrever 2 funções para serem chamadas. A que vai exibir a caixa de diálogo para abertura e para salvamento do arquivo.

    Private Function OpenFile() As String
            Dim fDlg As New System.Windows.Forms.OpenFileDialog
            fDlg.Filter = "Arquivo INI|*.ini"
            Dim FilePath As String = ""
            If fDlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                FilePath = fDlg.FileName
            Else
                FilePath = ""
            End If
            fDlg.Dispose()
            Return FilePath
        End Function
    
        Private Function SaveFile() As String
            Dim fDlg As New System.Windows.Forms.SaveFileDialog
            fDlg.Filter = "Arquivo INI|*.ini"
            Dim FilePath As String = ""
            If fDlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                FilePath = fDlg.FileName
            Else
                FilePath = ""
            End If
            fDlg.Dispose()
            Return FilePath
        End Function

    O problema agora está na chamada, se você chamar as funções direto, para cada gravação/leitura que você for fazer, uma nova janela será exibida e com isso outro arquivo aberto.

    Você precisa criar uma variável qualquer para o arquivo aberto/salvo e usar ela de referência.

    Public Sub LerINI()
        Dim Path As String = OpenFile()
        'Ai rotar cada LerINI conforme a necessidade usando a variável
        lerINI(Path, "propriedade_abc", "valor_abc"
    End Sub

    Espero ter ajudado, retorne se ainda tiver dúvidas.

    • Sugerido como Resposta SammuelMiranda terça-feira, 21 de janeiro de 2014 16:59
    • Marcado como Resposta Free4k terça-feira, 21 de janeiro de 2014 17:14
    terça-feira, 21 de janeiro de 2014 16:59

Todas as Respostas

  • Se eu não me engano o .NET Framework não tem nenhuma classe que permitir operar com arquivos .ini. Para configurações etc, o framework apoia o uso de configurações baseadas em XML.

    Portanto acho que não rola isso não. Apesar que tem alguns workarounds para isso.

    Seguem dois links que encontrei para workarounds durante uma pesquisa rápida.

    http://www.codeproject.com/KB/cs/cs_ini.aspx 
    http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/

    Até mais :)

    quarta-feira, 20 de novembro de 2013 18:22
  • Tem sim, eu tenho uma classe aqui.
    quarta-feira, 20 de novembro de 2013 18:26
  • Pelo jeito eu estava errado :D

    Bom dei uma pesquisada aqui sobre isso o que eu consegui foi o seguinte

    Para o OpenFileDialog:

     
      Dim OpenDLG As New OpenFileDialog
            Dim FileLocation = OpenDLG.FileName.ToString()
    
            OpenDLG.Filter = "INI File (*.ini)|*.ini"
            OpenDLG.Title = "Open INI File"
            OpenDLG.InitialDirectory = "C:\"
            OpenDLG.RestoreDirectory = True
    
            DialogResult = OpenDLG.ShowDialog

    Para o SaveFileDialog

      Dim myStream As Stream
            Dim saveFileDialog1 As New SaveFileDialog()
    
            saveFileDialog1.Filter = "INI File (*.ini)|*.ini"
            saveFileDialog1.FilterIndex = 2
            saveFileDialog1.RestoreDirectory = True
    
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
                myStream = saveFileDialog1.OpenFile()
                If (myStream IsNot Nothing) Then
                    ' Code to write the stream goes here.
                    myStream.Close()
                End If
            End If

    Espero ter ajudado em algo agora :D


    Até mais o/

    quarta-feira, 20 de novembro de 2013 18:51
  • Olá! Obrigado, mas qual código devo usar para trocar o "C:\Users\Hawer\Desktop\arquivo.ini" pelo OpenFileDialog, e depois para salvar o SaveFileDialog?

    Label1.Text = lerINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização")
    
            escreveINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização", "Texto")
    quarta-feira, 20 de novembro de 2013 18:59
  • Então, eu não sei como você está fazendo agora, mas seria algo como criar um botão "Abrir" e "Salvar".

    No botão "Abrir" você colocaria o OpenFileDialog e abriria o arquivo etc. Quando terminasse iria clicar em "Salvar" que teria o SaveFileDialog.

    Como que você ta querendo que funcione ?

    quarta-feira, 20 de novembro de 2013 19:12
  • Olá! É assim: preciso trocar o diretório que tem no código que mostrei por o OpenFileDialog e SaveFileDialog. Veja:

    Label1.Text = lerINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização")
    
    escreveINI("C:\Users\Howar\Desktop\arquivo.ini", "Settings", "inicialização", "Texto")
    
    Como deve ficar:
    
    Label1.Text = lerINI(OpenFileDialog, "Settings", "inicialização")
    
    escreveINI(SaveFileDialog, "Settings", "inicialização", "Texto")

    Veja o módulo que estou usando:

    Imports System.Text
    Imports System.Runtime.InteropServices
    
    Module INI
        <DllImport("kernel32.dll", SetLastError:=True)> Public Function WritePrivateProfileString _
          (ByVal lpApplicationName As String, _
          ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
        End Function
    
        <DllImport("kernel32.dll", SetLastError:=True)> Public Function GetPrivateProfileString( _
          ByVal lpAppName As String, _
          ByVal lpKeyName As String, _
          ByVal lpDefault As String, _
          ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
        End Function
    
        Public Function lerINI(ByVal strIniFile As String, ByVal strKey As String, ByVal strItem As String) As String
            Dim strValue As StringBuilder = New StringBuilder(255)
            Dim intSize As Integer
            intSize = GetPrivateProfileString(strKey, strItem, "", strValue, 255, strIniFile)
            Return strValue.ToString
        End Function
    
        Public Function escreveINI(ByVal strIniFile As String, ByVal strKey As String, _
                                ByVal strItem As String, ByVal strValue As String) _
                                    As Boolean
            Return WritePrivateProfileString(strKey, strItem, strValue, strIniFile)
        End Function
    
        'Para ler um arquivo .ini: lerINI(Diretório do arquivo + arquivo.ini, "valor entre cochetes", "valor antes do igual")
        'Para escrever arquivo .ini: escreveINI(Diretório do arquivo + arquivo.ini, "Valor entre cochetes", "valor antes do igual", "valor depois do igual")
    End Module
    

    quarta-feira, 20 de novembro de 2013 19:27
  • Acho que não tem como fazer isso cara...

    Essa função recebe uma string, e o OpenFileDialog é uma classe...

    O que você pode tentar fazer é dentro da função utilizar o OpenFileDialog como deve ser.

    Dai vc teria que alterar as duas funções que você tem atualmente.

    Não sei se essas alterações são válidas para você, mas é a única forma que eu consigo pensar agora.


    quarta-feira, 20 de novembro de 2013 19:37
  • Eu fiz com a função abaixo, porém salvou cada configuração em um arquivo, e não no mesmo.

    Public Function SaveFile() As String
            Dim Dlg As New SaveFileDialog
            Dlg.Filter = "Arquivo INI|*.ini"
            Dlg.FilterIndex = 0
            Dlg.ShowDialog()
            Return Dlg.FileName
        End Function
    quarta-feira, 20 de novembro de 2013 19:53
  • Então, passo 1 é escrever 2 funções para serem chamadas. A que vai exibir a caixa de diálogo para abertura e para salvamento do arquivo.

    Private Function OpenFile() As String
            Dim fDlg As New System.Windows.Forms.OpenFileDialog
            fDlg.Filter = "Arquivo INI|*.ini"
            Dim FilePath As String = ""
            If fDlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                FilePath = fDlg.FileName
            Else
                FilePath = ""
            End If
            fDlg.Dispose()
            Return FilePath
        End Function
    
        Private Function SaveFile() As String
            Dim fDlg As New System.Windows.Forms.SaveFileDialog
            fDlg.Filter = "Arquivo INI|*.ini"
            Dim FilePath As String = ""
            If fDlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                FilePath = fDlg.FileName
            Else
                FilePath = ""
            End If
            fDlg.Dispose()
            Return FilePath
        End Function

    O problema agora está na chamada, se você chamar as funções direto, para cada gravação/leitura que você for fazer, uma nova janela será exibida e com isso outro arquivo aberto.

    Você precisa criar uma variável qualquer para o arquivo aberto/salvo e usar ela de referência.

    Public Sub LerINI()
        Dim Path As String = OpenFile()
        'Ai rotar cada LerINI conforme a necessidade usando a variável
        lerINI(Path, "propriedade_abc", "valor_abc"
    End Sub

    Espero ter ajudado, retorne se ainda tiver dúvidas.

    • Sugerido como Resposta SammuelMiranda terça-feira, 21 de janeiro de 2014 16:59
    • Marcado como Resposta Free4k terça-feira, 21 de janeiro de 2014 17:14
    terça-feira, 21 de janeiro de 2014 16:59
  • Obrigado amigo!
    terça-feira, 21 de janeiro de 2014 17:15