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 | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

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 | Scanner: Canon Canoscan 9000F
Ö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.

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: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
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: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
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 | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

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 | Scanner: Canon Canoscan 9000F
Ö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.

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

AMD Ryzen 7 7800X3D • ASUS TUF Gaming B650-Plus WiFi • Noctua NH-D15
XFX Radeon RX 6950 XT Speedster MERC 319 • MSI Optix MAG271CQR • Dell UltraSharp U2515H
G.Skill 32GB DDR5 6000MHz CL30 • WD Black SN750 NVMe SSD 1 TB • Crucial P3 Plus NVMe SSD 1 TB
Phanteks P600S • ASUS TUF Gaming 850W Gold • Logitech Craft Keyboard • Logitech MX Master 3