Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: VB.NET a pliki .ini
busio
busio




Typ: neutral
Postów: 98
Zarejestrowany: Sep 2002
VB.NET a pliki .ini

Witam

Próbuję ostatnio wykonywać operacje na plikach ini i mam taki oto problem:

Zapis do ini przy uzyciu WritePrivateProfileString działa bez zarzutu (jak pod VB6) , ale odczyt poprzez GetPrivateProfileString zwraca pusty string i jakąs kosmiczną liczbę jako ilość skopiowanych znaków. (zastosowałem składnie jak w VB6). Działa dobrze tylko jeśli szukana sekcja i klucz są w win.ini

Może ktos wie jak  pod netem obsłużyć ini (a moźe to tylko u mnie coś źle działa)

Pozdrawiam busio

01-12-2003 15:29
Pokaż profil busio  Wyślij email do busio   Odwiedź stronę busio  
anonim




Typ: Nie zarejestrowany
Super ocx

Miałem podobny problem. Rozwiązanie to plik ocx który mozesz pobrac ze strony http://www.vbworks.prv.pl/ jest to dobrze napisana kontrolka z dużą ilością mozliwości operacji na pliku INI .Uwaga instrukcja znajduje się w pliku DOC

pozdrawiam
HUMI

25-03-2005 13:19
  
busio
busio




Typ: neutral
Postów: 98
Zarejestrowany: Sep 2002

Dzięki

Po dłuższych staraniach doszedłem do czegoś takiego

public class ble
{
  [DllImport("kernel32.dll", SetLastError = true)]
  public static extern uint GetPrivateProfileString (string lpApplicationName, string lpKeyName,string lpDefault ,StringBuilder  lpReturnedString , uint nSize,string lpFileName );

  [DllImport("kernel32.dll", SetLastError = true)]
  public static extern uint WritePrivateProfileString (string lpApplicationName, string lpKeyName,string lpValue ,string lpFileName );


  public static string CzytajIni(string plik,string sekcja,string klucz)
  {
 
  StringBuilder ret = new  StringBuilder(255);
  uint size;
 
  size = GetPrivateProfileString(sekcja, klucz, "", ret, 255, plik);

  return ret.ToString();
  }

  public static uint PiszIni(string plik,string sekcja,string klucz,string wartosc)
  {
  uint ret;

  if (plik.Length == 0) {return 0;}
  if (sekcja.Length == 0) {return 0;}
  if (klucz.Length == 0) {return 0;}

  ret = WritePrivateProfileString(sekcja, klucz, wartosc,plik);
 
  return ret;
  }
}

Jest to w C# ale nie ma specjalnie problemów aby było w VB.
Na razie mi działa
Dzięki za odpowiedz!

Pozdrawiam busio

25-03-2005 14:07
Pokaż profil busio  Wyślij email do busio   Odwiedź stronę busio  
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004

1. Najpierw utwórz klasę


Public Class Ini
    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 String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
    Private Declare Ansi Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" _
    (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
    Private Declare Ansi Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" _
    (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
    Private Declare Ansi Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
    Private ConfigObject As String

    Public Sub New(ByVal strIniPathFileName As String)
        ConfigObject = strIniPathFileName
    End Sub

    REM odczyt ciągów tekstowych
    Public Function Read(ByVal Section As String, ByVal Key As String, Optional ByVal strDefault As String = "" As String
        Dim v As Integer, strTemp As String = ""
        strTemp = strTemp.PadLeft(255, Chr(0))
        v = GetPrivateProfileString(Section, Key, strDefault, strTemp, 255, ConfigObject)
        If v > 0 Then Read = Left(strTemp, v)
    End Function
    'odczyt sekcji
    Public Function ReadSection(ByVal Section As String) As String
        Dim v As Integer, strTemp As String = ""
        strTemp = strTemp.PadLeft(4096, Chr(0))
        v = GetPrivateProfileSection(Section, strTemp, 4096, ConfigObject)
        If v > 0 Then ReadSection = Left(strTemp, v - 1)
    End Function
    'zapis
    Public Sub Save(ByVal Section As String, ByVal Key As String, ByVal Value As String)
        WritePrivateProfileString(Section, Key, Value, ConfigObject)
    End Sub
    'zapis sekcji
    Public Sub SaveSection(ByVal Section As String, ByVal Value As String)
        WritePrivateProfileSection(Section, Value, ConfigObject)
    End Sub
    'usuwanie klucza
    Public Sub RemoveKey(ByVal Section As String, ByVal Key As String)
        WritePrivateProfileString(Section, Key, vbNullString, ConfigObject)
    End Sub
    'usuwanie sekcji
    Public Sub RemoveSection(ByVal Section As String)
        WritePrivateProfileString(Section, vbNullString, "", ConfigObject)
    End Sub
End Class


2.zadeklaruj zmienną

Public myIni As New Ini(Application.StartupPath & "\Plik.ini"


3. i korzystaj do woli

Rem odczyt
A = myIni.Read("DISPLAY", "Adbpp", 15)

Rem zapis
myIni.Save("TAB", "Tab4", Me.TabControl4.SelectedIndex)



_____________________________________________
Visual Basic.NET - Mercedes dla programistów

26-03-2005 16:55
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1