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>

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 | Sapphire 9070xt pulse| Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem

Jag hade föredragit JSON.

Permalänk
Medlem

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 B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, Switch 2, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 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.

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.

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

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
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!

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

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

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 | Sapphire 9070xt pulse| Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem
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 B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, Switch 2, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 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.

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

EndeavourOS: Your search for the best Arch distro ends here
7800X3D » RX6950XT » G.SKILL 32GB » LG OLED42C35LA