Speicherung der Einstellungen in *INI | Speichern möglich?

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von GambaJo.

    Speicherung der Einstellungen in *INI | Speichern möglich?

    Holla VB-Gemeinde.

    Wie das Speichern und Auslesen der INI-Datei funktioniert, weiß ich.
    Wollte nur mal von Profis um Aufklärung bitten.


    Habe vor, Einstellungen in einer INI-Datei zu speichern.
    Sobald man das Programm öffnet, klar, greift das Programm auf die INI-Datei zu.
    Wenn ich aber in den Einstellungen (Menüpunkt) Einstellungen vornehme und diese speichere, sagt dann das Programm nicht, dass die verwendete Datei schon von einem anderem Programm genutzt wird?

    Weitere Frage.
    Wenn das Speichern doch funktioniert, wird dieses im Programm sofort übernommen oder muss das Programm neu starten?
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Ich denke mal das es Übernommen wird wenn du es so einprogrammiert hast das es Übernommen werden soll.
    Aber sonst denke ich aber auch das man es erst neu starten muss.

    Man kann es aber auch so Schreiben das es übernommen wird ohne neu Start.


    Zu allen 3 Antworten bin ich mir nicht zu 1000% sicher aber denke es wird so sein

    Auf eine INI-Datei kann multiple zugegriffen werden, da passiert überhaupt nichts.
    Du musst in Deinem Ablauf organisieren, dass die Zugriffe korrekt erfolgen. Da ist ein Neustart nicht erforderlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Zur 1. Frage:
    Kommt immer drauf an. Wenn du mit einem Stream/Streamreader arbeitest und ihn nicht nach verwenden schließt kommt der Fehler nicht.

    Zu 2.:
    In der Regel nicht. Z.B. wenn du eine Einstellung über die Hintergrundfarbe eines Fensters hast, kannst du diese direkt nach Eingabe anpassen ohne das ein Neustart nötig ist.


    Mfg
    Firestorm
    Hi ....

    "Ablauf organisieren" -> ja, die Frage, wie stelle ich das an?
    "multiple zugegriffen" -> was meinst damit?

    Im Forum hier, habe ich bisher keine Lösung oder Ansatzpunkt finden können.


    Edit #Firestorm:

    1)
    Auslesen/Speichern mit folgender Funktionen:

    VB.NET-Quellcode

    1. #Region "Funktionen"
    2. 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
    3. Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
    4. 'Funktion zum Schreiben
    5. 'strSection = Sektion in der INI-Datei
    6. 'strKey = Name des Schlüssels
    7. 'strValue = Wert, der geschrieben werden soll
    8. 'strFile = Vollständiger Pfad zur INI-Datei
    9. Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0))
    10. End Function
    11. 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
    12. Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
    13. 'Funktion zum Lesen
    14. 'strSection = Sektion in der INI-Datei
    15. 'strKey = Name des Schlüssels
    16. 'strDefault = Standardwert, wird zurückgegeben, wenn der Wert in der INI-Datei nicht gefunden wurde
    17. 'strFile = Vollständiger Pfad zur INI-Datei
    18. Dim strTemp As String = Space(1024), lLength As Integer
    19. lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
    20. Return (strTemp.Substring(0, lLength))
    21. End Function
    22. #End Region


    2)

    Geht eher um Sicherungsorte (Backup-Ort).
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    JackCimberly schrieb:

    "Ablauf organisieren" -> ja, die Frage, wie stelle ich das an?
    So programmieren, das es geht, wie Du es Dir vorstellst.

    JackCimberly schrieb:

    "multiple zugegriffen" -> was meinst damit?
    Wenn Du mit den System-Profile-Funktionen arbeitest, gibt es keinerlei Probleme bezüglich paralleler Zugriffe von mehreren Programmen gleichzeitig.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich würde mir eine Sub machen, welche die Einstellungen ausließt und dementsprechend verarbeitet.
    Diese rufst du dann auf, wenn dein Programm startet und nachdem der User seine Einstellungen speichert. D.h. die Einstellungen werden übernommen.

    Und die .ini wird ja nur von deinem Programm wirklich benutzt in dem Moment, wo du die Einstellungen gerade speicherst. Ansonsten ist sie ja freigegeben
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    Ah ja gut.

    Ich hake das mal ab. Eure Informationen langen mir vorerst. :)
    Werde mich wieder melden, sobald ich nicht weiterkommen soll.
    Danke Euch.

    Edit #GambaJo
    Gerade die My.Settings Methode wollte ich abschaffen.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JackCimberly“ ()

    JackCimberly schrieb:

    Moin.

    hehe ...
    Das Problem, was ich mit My.Settings habe ist, dass, wenn ein Update raus kommt, dass die Einstellungen erneut vorgenommen werden müssen.

    Abhilfe:

    VB.NET-Quellcode

    1. My.Settings.Upgrade

    Edit: Etwas ausführlicher
    Man könnte in den Einstellungen eine zusätzliche Variable zum Abspeichern der Anwendungsversion erstellen. Beim Start der Anwendung wird diese mit der ProductVersion verglichen. Unterscheiden sich die beiden, wird ein Upgrade der Settings durchgeführt und die neue Versionsnummer abgespeichert.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ' Settings-Version prüfen
    3. If My.Settings.SettingVersion <> Application.ProductVersion.ToString Then
    4. My.Settings.Upgrade()
    5. My.Settings.SettingVersion = Application.ProductVersion.ToString
    6. My.Settings.Save()
    7. End If
    8. ' ...
    9. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xtts02“ ()

    xtts02 schrieb:

    JackCimberly schrieb:

    Moin.

    hehe ...
    Das Problem, was ich mit My.Settings habe ist, dass, wenn ein Update raus kommt, dass die Einstellungen erneut vorgenommen werden müssen.

    Abhilfe:

    VB.NET-Quellcode

    1. My.Settings.Upgrade


    Oh, von diesem Befehl habe ich bisher keine Kenntnis gehabt.
    Danke Dir. Schaue ich mir mal an.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Danke Dir.

    Aber, ich habe folgendes genommen:

    VB.NET-Quellcode

    1. If My.Settings.checkfor_updates_start <> Application.ProductVersion.ToString And My.Settings.note <> Application.ProductVersion.ToString And My.Settings.savepath <> Application.ProductVersion.ToString Then
    2. My.Settings.Upgrade()
    3. My.Settings.savepath = Settings_backuplocation.lbl_savepath_new.Text
    4. My.Settings.note = Settings_notice.CheckBox1.Checked
    5. My.Settings.checkfor_updates_start = Settings_updates.CheckBox2.Checked
    6. My.Settings.Save()
    7. End If


    Wenn ich Application.ProductVersion.ToString setze, dann wird z.B. bei savepath Application.ProductVersion.ToString gesetzt (also die Programmversion).

    Muss ich aber noch testen.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    bla schrieb:

    in welchem Pfad wird die app.config eigentlich gespeichert?
    Wird unsichtbar gespeichert, oder?


    Ja *vermut*.

    Bei mir wird es unter C:\Users\Name\AppData\Local\Firma gespeichert. (Win7)
    Firma = Assembly.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    GambaJo schrieb:

    Nein, sie ist nicht versteckt. Sie liegt im gleichen Ordner, wie die EXE
    Das ist nicht korrekt.
    @JackCimberly: OK
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Anwendungskonfigurationsdatei: Falls einer .NET-Anwendung eine Anwendungskonfigurationsdatei zugeordnet wird, ist diese immer im Stammverzeichnis der Anwendung zu finden. Der Name einer Konfigurationsdatei setzt sich aus dem Namen der Programmdatei und dem Suffix .config zusammen. Heißt die Programmdatei MyApplication.exe, heißt die Konfigurationsdatei demnach MyApplication.exe.config


    Quelle: Galileo Computing: Visual C# 2010 - Das umfassende Handbuch

    Also war das korrekt.