Laden...

Speicherort von 'Properties.Settings' ändern?

Erstellt von CSharpFreak vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.897 Views
C
CSharpFreak Themenstarter:in
42 Beiträge seit 2014
vor 8 Jahren
Speicherort von 'Properties.Settings' ändern?

Hallo -
ich habe eine Frage bezüglich des speichern der default Properties eines VS-Projekts.
Gibt es die Möglichkeit den Speicherort zu ändern, sodass diese nicht im '....AppData\Local[Anwedungsname]' abgespeichert werden?
Oder muss ich einen eigenen Wrapper für die Properties schreiben?
Ich finde leider nur Sachen die sich auf das .Net 2.0 beziehen, wo gesagt wird das man den Speicherort nicht abändern kann.
Hat sich daran bisher nichts geändert?

MfG

212 Beiträge seit 2008
vor 8 Jahren

Hallo,

keine Ahnung ob das geht. Ich mache das immer so:

Das ist meine Klasse zum serialisieren:


public class MySerializer
{
    public static void Serialize(object myClass, string directory, string file)
    {
        if (!Directory.Exists(directory))
            Directory.CreateDirectory(directory);

        string fileabs = Path.Combine(directory, file);

        using (FileStream myFileStream = new FileStream(fileabs, FileMode.Create))
        {
            BinaryFormatter binFormatter = new BinaryFormatter();
            binFormatter.Serialize(myFileStream, myClass);
        }
    }

    public static object Deserialize(string file)
    {
        object oldObject = null;

        if (File.Exists(file))
        {
            using (FileStream myFileStream = new FileStream(file, FileMode.Open))
            {
                BinaryFormatter binFormatter = new BinaryFormatter();
                oldObject = binFormatter.Deserialize(myFileStream) as object;
            }
        }
        return oldObject;
    }
}

Klasse mit Properties


[Serializable]
public class Person
{
    public string Name { get; set; }
}


und so serialisire/deserialisiere ich:


private void SaveLoad()
{
    //Serialisieren
    Person p = new Person() { Name = "Müller" };
    MySerializer.Serialize(p, @"c:\Test", "PersonFile.Set");

    //Deserialisieren
    string file = Path.Combine(@"c:\Test", "PersonFile.Set");
    var olpP = MySerializer.Deserialize(file) as Person;
}

Alternativ gibt es auch einen XMLSerializer. Ob es noch weitere Möglichkeiten gibt kann ich die nicht sagen. Mal schauen was hier noch an Vorschlägen kommt.

Gruß
Christoph

2.079 Beiträge seit 2012
vor 8 Jahren

Für Settings finde ich auch die Idee ganz interessant, mit JSON zu serialisieren.
Weniger Overhead, leichter zu überblicken
Besonders wenn der User diese Settings bearbeiten können soll

Allgemein wird's aber darauf hinaus laufen, selber zu serialisieren.

Eventuell kannst Du den Pfad bestimmen, wenn Du einen eigenen Settings-Provider schreibst. Ich hab das einmal gemacht und finde das ziemlich umständlich. Eine Möglichkeit, den Pfad zu ändern habe ich auch nicht gesehen, aber Du kannst es dir ja mal anschauen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

T
708 Beiträge seit 2008
vor 8 Jahren

Der Pfad kann praktisch nur (ohne Palladin007´s Vorschlag einen Settings-Provider zu berücksichtigen) zwischen Anwendung und Benutzer gewechselt werden.
"Anwendung" erstellt die Datei in dem von Dir genannten Ordner, "Benutzer" im entsprechenden Users\Benutzername\Local\Roaming\usw.-Verzeichnis.
Macht Sinn wenn eine Applikation per RDP von mehreren Benutzern parallel ausgeführt wird.

Mittlerweile habe ich auch für so gut wie jedes Programm einen eigenen serializer. Wenn der einmal läuft, muss man da auch i.d.R. nie wieder ran 😃

Gruß
trib