WinFuture-Forum.de: INI-Datei erstellen/auslesen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

INI-Datei erstellen/auslesen in VB 2010 Express


#1 Mitglied ist offline   Xaero_0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 518
  • Beigetreten: 23. März 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Paderborn

geschrieben 11. März 2019 - 17:44

Huhu!

Ich versuche seit 3 Tagen ein einfaches Tutorial nachzubauen. Aber es will einfach nicht funktionieren und ich komme einfach nicht weiter.

Public Class Form1

    Public Const SaveFile As String = "C:\test.ini" 'Pfad + Dateiname
    Public Const Section As String = "Meine Daten" 'Überschrift in INI [xxxx]

#Region "API"

    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 Int32, ByVal lpFileName As String) As Int32
    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 Int32


    Public Shared Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
        Dim strTemp As String = Space(1024), lLength As Integer
        lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
        Return strTemp.Substring(0, lLength)
    End Function

    Public Shared Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
        Return Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0)
    End Function
#End Region


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        INI_WriteValueToFile(Section, "erster Wert", TextBox1.Text, SaveFile)

    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        TextBox1.Text = INI_ReadValueFromFile(Section, "erster Wert", "", SaveFile)

    End Sub
End Class




VB zeigt keine Fehler an, aber es wird einfach keine Datei erstellt.
Woran kann das liegen?
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 11. März 2019 - 18:59

Mh. Die Funktionen stimmen - Daten werden gelesen und geschrieben.

Sieht also so aus, als würde das Eventhandling nicht funktionieren.

Schau mal nach, ob Du mit MsgBox oder sowas eine Box auf den Bildschirm bekommst, wenn Du auf den (einen der) Knöpfe drückst.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Xaero_0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 518
  • Beigetreten: 23. März 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Paderborn

geschrieben 12. März 2019 - 17:54

Danke für die Hilfe!

Hat leider nicht funktioniert.
Ich habe die Buttons einzeln getestet und auch noch mal eine neue textbox probiert.

Hat noch jemand eine Idee?
0

#4 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 12. März 2019 - 18:44

Um etwas in eine Datei zu schreiben oder aus ihr zu lesen, musst du diese erstmal initialisieren und öffnen. Nur ein Verweis auf einen Pfad funktioniert nicht.

classIni
Spoiler


Initialisieren mit
Spoiler


lesen der Einträge
Spoiler


schreiben der Einträge
Spoiler


Soviel ich weis, darf der Hauptkey und der Subkey in der Ini keine Leerzeichen enthalten. Der Übersichtshalber schreibe ich den Hauptkey auch immer groß. Sieht dann etwa so aus:

[SQLSERVER]
Address=localhost
Port=3306
Charset=utf8

[USER]
Name=user
Passwd=password

Dieser Beitrag wurde von Gispelmob bearbeitet: 12. März 2019 - 19:12

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#5 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 12. März 2019 - 20:26

Wie, "hat nicht funktioniert"? Heißt das, der Click-Handler ist angesprungen, oder heißt das, schon das hat nicht funktioniert? :unsure:


Weil, ich hab Deinen Code von oben hergenommen, die Handler auskommentiert und das Ganze mit einer Main() Routine und Standardwerten ausführen lassen. Das hat ohne weitere Änderungen funktioniert.

Was ich nicht testen konnte war die Form selber, weil Du die nicht gepostet hast. Aber ich würde vorsichtig behaupten wollen, daß WENN die Click-Handler anspringen UND Du sicherstellen kannst, daß die richtigen Werte aus den Steuerelementen eingesammelt werden (und an die Ini*-Routinen übergeben werden können) daß es dann hinhauen MÜßTE.


VB ist natürlich immer bissel doof, vielleicht ist C# angenehmer. Nicht daß VB irgendwelche Ausnahmen untern Tisch kehrt von wegen "konnt nicht schreiben wegen E_ACCESSDENIED - na und".

MÖGLICHERWEISE schießt bei Dir der INI-Pfad quer. Änder den mal nach %TEMP% oder nach %USERPROFILE%, wo Du auf jeden Fall schreiben können solltest.

Ansonsten... fällt mir grad nichts anderes ein.

- Getestet hab ich mit Windows' eigenem VB.NET Compiler (C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe).
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#6 Mitglied ist offline   Xaero_0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 518
  • Beigetreten: 23. März 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Paderborn

geschrieben 13. März 2019 - 16:59

Sry, hab dich wohl missverstanden. Kenne VB nur aus Tutorials und lernen durch probieren. :P


Zitat

MÖGLICHERWEISE schießt bei Dir der INI-Pfad quer.


Genau daran lag es. :D

Mit "eigenem" Ordner als Speicherpfad hat es geklappt. :)
0

#7 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 14. März 2019 - 03:35

:)

Dann nur noch als Verbesserungsvorschlag: Schau Dich mal um, wie es mit Unicode-Alternativen aussieht. Du verwendest bisher ANSI-APIs (*A in der Win32-API). Unicode hat *W statt des *A. Funktionssignatur *müßte* dieselbe sein.

Dann hast Du nicht das Problem, daß Dir irgendwelche Sonderzeichen um die Ohren fliegen, weil Du außer Ö auch noch Sigma, Yen und Karacho reinschreiben wolltest.

Wenn Du erstmal den Datenbestand in ANSI hast, dann wird Ändern umständlicher und fehleranfälliger. Daher am besten gleich von anfang an.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#8 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 578
  • Beigetreten: 14. Juni 12
  • Reputation: 73
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Mein Haus, meine IT, Programmierung

geschrieben 25. April 2019 - 19:09

Ich gebe mal vorsichtig meinen Senf dazu - warum eine INI? Als Settings werden heute bei Windows Programmen fast nur noch XML Files genommen. Alles andere ist aus der Historie heraus geblieben.

Erklärung

Und sofern du nicht vor hast einen Treiber zu entwickeln der INF Files (ähnlicher Aufbau wie die INI) nutzt, dann würde ich dir persönlich raten den Fokus auf XML zu setzen. INI lesen und schreiben zu können ist ok, aber nicht mehr Up-To-Date (für die heutige Programmierzeit).
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0