Autor Beitrag
schickmaster
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 22.11.10 16:12 
Hallo,

ich will aus einer config file daten in ein Byte array schreiben und anschließend mehrere byte arrays aus dem configfile ein eine funktion übergeben. wie kann ich das am besten machen? ich kann bisher nur einzelne werte aus dem config einlesen, bei mehrere gits einen fehler.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="yval" value="320" />
    <add key="xval" value="240" />
    <add key="Wert" value="1, 34" />
    <add key="Wert" value="2, 255" />


  </appSettings>
</configuration>

ausblenden C#-Quelltext
1:
2:
3:
  byte [] wert = (byte [])config.GetValue("Wert"typeof(byte []));

dev.SPI_Write(wert, 2, Sub20.SpiSS_LO);


leider wird nur der letzte wert geschrieben, und auch nur, wenn ich eine einzelne zahl angebe.
kennt jemand eine lösung?

gruss alex


Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am Mo 22.11.2010 um 18:51
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 24.11.10 22:42 
Hi,

also, die Werte in einer Anwendungskonfigurationsdatei werden beim auslesen als NameValueCollection behandelt. Jedenfalls soviel ich weiß. Dabei ist der Name vom Typ string, und der Value auch.
Wenn Du also aus mehreren Zahlenwerten, die als Value Komma-separiert vorliegen, ein Byte[] machen willst, so musst Du Dich selber darum kümmern!

Eine Möglichkeit hierbei wäre, dass Du das Ganze mit dem ConfigurationManager einliest, die Werte splittest und in byte-Werte konvertierst:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
using System.Configuration;
using System.Collections.Specialized;

private static byte[] GetValues()
{
  object config = ConfigurationManager.GetSection("appSettings");
  var values = config as NameValueCollection;
  if (values != null)
  {
    string werte = values["Wert"];
    return Array.ConvertAll<stringbyte>(werte.Split(new char[] { ',' }), 
                                        new Converter<stringbyte>(StringToByteConverter));
  }
  return null;
}

private static byte StringToByteConverter(string value)

  int result;
  if (!int.TryParse(value, out result) || result > byte.MaxValue)
    throw new InvalidCastException(string.Format("Cannot convert \"{0}\" to byte-Value", value));
  return (byte)result;
}

(Für den ConfigurationManager muss eine Referenz auf System.Configuration eingebunden werden)

Aber beachte dabei: wenn mehrer Einträge in der Section mit dem gleichen Namen existieren, dann wird die letzte NameValueCollection genommen. Und wenn mehrere Anwendungskonfigurationsdateien existieren, dann wird die erste genommen.
Meines Erachtens ziemlich unsicher, zumal der Benutzer auch darin rumpfuschen kann. Aber um mögliche Fehlerbehandlung musst Du Dich selber kümmern!

Marko