C# Spara inställningar i extern fil, hur tänka?

Permalänk

C# Spara inställningar i extern fil, hur tänka?

Hej.

Jag håller på med ett litet program som kan skriva ut kassörkort, skrivs när det blir en stund över och kommer få nytta av det i jobbet (läs minska minska min egen arbetsbörda på sikt).

För att kunna spara vissa standardvärden vill jag ha en extern fil att spara det i och då känns XML lämpligt?
Tänker jag rätt med nedan struktur eller helt fel?

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <Settings> <ButiksID>001234</ButiksID> <Butiksnamn>Testbutik 1</Butiksnamn> <Logga>logga.jpg</Logga> <SetPrinter>1</SetPrinter> <Printer>Microsoft Print to PDF</Printer> </Settings>

Visa signatur

Livets 3 pelare:
SEX, MAT & KAFFE.

Permalänk
Medlem

Låter som en rimlig lösning imo. Du kan skapa ett settings object som du sedan serialiserar till xml och sparar som en fil på något lämpligt ställe.

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | Dell S2721DGFA | Asus MG279Q |

Permalänk
Medlem

Jag hade föredragit JSON.

Permalänk

Gör det så enkelt som möjligt men som ändå uppfyller dina önskemål. "Keep it simple" är mitt motto.

Visa signatur

Dator: MB: Gigabyte Z390 M GAMING mATX | CPU: Intel Core i9 9900K 3.6 GHz (Haswell) | RAM: Corsair 16GB (KIT) 3200Mhz Vengeance LPX | Grafikkort: ASUS GeForce RTX 3060 12GB PHOENIX V2 (LHR) | Chassi: Fractal Design Mini | PSU: Corsair RM750X 750W v2 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Noctua NH-U12S | Operativ: Windows 11
Övrigt: Nintendo Switch, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, Famicom Disk System, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 14 Pro 128GB, LG OLED 55C2,

Permalänk
Skrivet av zaibuf:

Jag hade föredragit JSON.

Är Json enklare att jobba mot?
Jag är ju egentligen bara ute efter att spara ner några värden och hämta upp dem. Extremt enkelt, så prestandan kan nog kvitta i detta fall.

Visa signatur

Livets 3 pelare:
SEX, MAT & KAFFE.

Permalänk
Skrivet av oRBIT2002:

Gör det så enkelt som möjligt men som ändå uppfyller dina önskemål. "Keep it simple" är mitt motto.

Går det att göra det ännu enklare än ovan? Är dessa 5 variabler med dess värde jag vi kunna läsa och uppdatera.

Visa signatur

Livets 3 pelare:
SEX, MAT & KAFFE.

Permalänk
Medlem
Skrivet av Lurcazzus:

Är Json enklare att jobba mot?
Jag är ju egentligen bara ute efter att spara ner några värden och hämta upp dem. Extremt enkelt, så prestandan kan nog kvitta i detta fall.

Vilket som funkar väl, men om json se t.ex. dessa exempel:

https://www.newtonsoft.com/json/help/html/SerializeWithJsonSe...
https://www.newtonsoft.com/json/help/html/DeserializeWithJson...

Visa signatur

AMD Ryzen9 5900X || Gigabyte X570 Ultra || RTX 3090 FE || Gskill Trident Z 3600 64GB || Samsung 950 Pro 512GB || Samsung 960 Pro 1024GB || XB270HU 1440p IPS G-Sync

Permalänk
Skrivet av Lurcazzus:

Går det att göra det ännu enklare än ovan? Är dessa 5 variabler med dess värde jag vi kunna läsa och uppdatera.

Kör på det där. En väsentligen större struktur hade sett roligare ut som json men när de är sådär små spelar det nog ingen roll för de flesta mänskohjärnor och många programspråk kan hantera båda typerna på bra sätt.

Visa signatur

| 212965 00 ] == :^D * ==)

Permalänk

Det där ser ju ut att vara betydligt enklare ut än att jobba med XML. Tack!

Visa signatur

Livets 3 pelare:
SEX, MAT & KAFFE.

Permalänk
Medlem
Skrivet av Lurcazzus:

Det där ser ju ut att vara betydligt enklare ut än att jobba med XML. Tack!

Det är nog ungefär samma, finns motsvarande stöd för serialisering/deserialisering av objekt till/från XML.

https://docs.microsoft.com/en-us/troubleshoot/dotnet/csharp/s... visar väl lite principen även om det inte är en exakt motsvarighet till de tidigare exemplen...

Visa signatur

AMD Ryzen9 5900X || Gigabyte X570 Ultra || RTX 3090 FE || Gskill Trident Z 3600 64GB || Samsung 950 Pro 512GB || Samsung 960 Pro 1024GB || XB270HU 1440p IPS G-Sync

Permalänk
Medlem
Skrivet av Lurcazzus:

Det där ser ju ut att vara betydligt enklare ut än att jobba med XML. Tack!

man kan serialisera till xml på ungefär samma sätt, men kör på vilket som, det spelar inte någon större roll

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | Dell S2721DGFA | Asus MG279Q |

Permalänk
Skrivet av Lurcazzus:

Går det att göra det ännu enklare än ovan? Är dessa 5 variabler med dess värde jag vi kunna läsa och uppdatera.

Du skulle kunna ha en textfil med 5 rader typ där du lagrar en parameter per rad. Lite oflexibelt i längden dock.

Visa signatur

Dator: MB: Gigabyte Z390 M GAMING mATX | CPU: Intel Core i9 9900K 3.6 GHz (Haswell) | RAM: Corsair 16GB (KIT) 3200Mhz Vengeance LPX | Grafikkort: ASUS GeForce RTX 3060 12GB PHOENIX V2 (LHR) | Chassi: Fractal Design Mini | PSU: Corsair RM750X 750W v2 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Noctua NH-U12S | Operativ: Windows 11
Övrigt: Nintendo Switch, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, Famicom Disk System, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 14 Pro 128GB, LG OLED 55C2,

Permalänk
Medlem
Skrivet av Lurcazzus:

Är Json enklare att jobba mot?
Jag är ju egentligen bara ute efter att spara ner några värden och hämta upp dem. Extremt enkelt, så prestandan kan nog kvitta i detta fall.

Tycker att det är enklare att läsa, strukturera och jobba med.

Med ditt exempel hade filen istället se ut så här:

{ "Settings": { "ButiksID": "001234", "Butiksnamn": "Testbutik 1", "Logga": "logga.jpg", "SetPrinter": "1", "Printer": "Microsoft Print to PDF" } }

Permalänk
Medlem

Du kanske kan spara ner objektet på fil via pickle:

https://github.com/irmen/pickle

Kört pickle i olika fall med Python när jag behöver spara ner object på disk och tillbaka. Ovanstående verkar vara en C#/Java implementation av protokollet.

Visa signatur
Permalänk
Medlem

@Lurcazzus

Om det inte är ett krav att det ska sparas i en fil så tycker jag att registret är lätt att jobba med, här är ett exempel för ditt fall

private void SaveSettings() { RegistryKey SoftwareKey = Registry.CurrentUser.OpenSubKey("Software", true); RegistryKey key = SoftwareKey.CreateSubKey("Ditt Program"); key.SetValue("ButiksID", "001234"); key.SetValue("Butiksnamn", "Testbutik 1"); key.SetValue("Logga", "logga.jpg"); key.SetValue("SetPrinter", "1"); key.SetValue("Printer", "Microsoft Print to PDF"); } private void LoadSettings() { RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Ditt Program"); var butiksID = (string)key.GetValue("ButiksID"); var butiksNamn = (string)key.GetValue("Butiksnamn"); var logga = (string)key.GetValue("Logga"); var setPrinter = (string)key.GetValue("SetPrinter"); var printer = (string)key.GetValue("Printer"); key.Close(); }

Sen kan det behövas lite felhantering osv, det där är bara ett enkelt exempel. Det har ju dock nackdelen att det bara fungerar i Windows.

Visa signatur

Skrivet med hjälp av Better SweClockers