Usuário com melhor resposta
Usar OpenFileDialog para abrir arquivo.ini

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!
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
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 :)
-
-
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/ -
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")
-
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 ?
-
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
-
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.
-
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
-
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
-