Laden...

Forenbeiträge von kolli Ingesamt 80 Beiträge

19.07.2009 - 18:23 Uhr

Hi,

Kann die Save() Methode von Image keine Verzeichnisse anlegen? Ich dacht sowas macht Windows automatisch?
Also wenn ich z.B. das verzeichnis "C:\Bilder" habe, ohne Unterordner und rufe dann Image.Save("C:\Bilder\auto\1.png") auf, dann bekomme ich einen allgemeinen GDI+ Fehler.

Wenn ich aber vorher mit Directory.CreateDirectory("C:\Bilder\auto") erstelle, dann funktioniert Image.Save() problemlos.

Kann man der Image.Save()-Methode irgendwie beibringen, selber Verzeichnisse anzulegen?

07.07.2009 - 20:03 Uhr

winSharp93:
Die Funktionen geben nicht alle Zeichen aus. Beide geben bei mir jeweils nur <, >, | und " aus. WIndows selbst teilt mir aber mit, welche Zeichen wirklich nicht erlaubt sind (in dem man per Hand einfach mal eine Datei so benennen will).

herbivore:
Ah, ok. Werd ich mal probieren.

07.07.2009 - 19:59 Uhr

Hi,

wie realisiert man am besten eine "Abbrechen" Funktion?
Also ich habe eine Funktion die berechnet irgendwelche Sachen, das durchaus im Minuten-Bereich oder länger liegen kann. Das legt aber das ganze Programm lahm. Diese Problem habe ich durch Application.DoEvents() gelöst, das wird pro Schleifendurchlauf einmal aufgerufen.
Allerdings möchte ich auch gerne einen "Abbrechen" Knopf einbauen. Ich habe dazu einen bool genommen, der immer am anfang der schleife geprüft wird. Drückt man auf abbrechen wird er zu false.

Allerdings läuft die Schleife trotzdem bis zum ende durch, auch wenn man den Knopf drückt. So als ob das DoEvents (und damit das setzen auf false) gar nicht ausgeführt wird.

Gibt es da irgendwelche anderen/besseren Möglichkeiten, um eine ordentliche "Abbrechen"-Funktion einzubauen?

07.07.2009 - 19:44 Uhr

Also mein Regex sieht so aus:
Regex regex = new Regex(@"[/*?<>|:]");
Wo genau muss dieser lookbehind hin? Wenn ich den in die eckige Klamer vor den Doppelpunkt schreibe geht es nicht.

Also ganz allgemein möchte ich z.B. sowas:
Der string "C:\bla*?:.exe" soll durch "C:\bla___.exe" ersetzt werden.

07.07.2009 - 18:51 Uhr

Ich dachte, dass verhindert das "@" davor? Selbst komplett ohn Backslash geht es nicht. Selbst wenn ich ausschließlich den Doppelpunkt (um den im Moment geht) reinschreibe geht es nicht.

edit:
Ah, dummer Fehler. Ich dacht Regex ändert den übergebenen String... Anstelle dessen muss man aber den Rückgabestring verwenden.

Aber da stoße ich gerade auf ein neues Problem:
Wenn ich den Doppelpunkt ersetze, wird auch der Doppelpunkt des Laufwerks ersetzt. Das soll er aber nicht. WIe ändere ich das? Also das sozusagen erst nach dem zweiten Zeichen das Pattern angewandt wird.

07.07.2009 - 18:30 Uhr

Hi,

Ich habe schon das Regex-Tutorial hier angeschaut, aber ich hab dennoch ein Problem.
Ich will einen Dateinamen inklusive Pfad auf nicht erlaubte Zeichen Prüfen und gegebenenfalls durch "" ersetzen.
Ich habe den string filename und ein Regex regex mit pattern @"[/:*?<>]".
Wenn ich jetzt regex.Replace(filename, "
") mache, dann ersetzt der mir aber nicht die angegebenen Zeichen.

In meinem Fall kommt ein Doppelpunkt im Dateinamen vor, der soll nun durch einen Unterstrich ersetzt werden. Das Aufrufen der Replace-Funktion macht aber einfach gar nichts.

27.06.2009 - 20:18 Uhr

Hi,

kann man einer ArrayList vorher einen bestimmten Typ zuweisen? Also das ich z.B. sagen kann in dieser ArrayList sind nur strings enthalten, so das ich nicht immer beim Zugriff das Objekt explizit in einen String konvertieren muss (also nicht string str = (string)list_, sondern nur string str = list_, da ich ja schon verher festgelegt habe, dass list nur strings enthält).

geht das?

27.06.2009 - 19:12 Uhr

Hi,

ich habe zwei Fragen zur Effizienz von StringBuildern. Mir ist klar, dass StringBuilder generell schneller sind, besonders bei vielen Stringoperationen (lange Schleifen die den gleichen string ständig verändern, etc).

Aber ab wann lohnt es sich generell, ihn zu verwenden? Angenommen ich muss ganz oft zwei strings (die natürlich jedesmal anders sind) zusammenfügen (my_string = string1 + string2), lohnt es da schon einen StringBuilder zu nehmen? Die Betonung liegt hier auf dem "oft" (sowas wie 1000+).

Und Frage zwei:
Lohnt es sich, bei Funktionsaufrufen einen StringBuilder zu übergeben anstelle eines strings? Also anstatt my_function(string str) sowas wie my_function(StringBuilder str).

Danke.

03.04.2009 - 19:31 Uhr

ToUpper macht aber alle zeichen groß, oder?

Soll ich jetzt für jeden Dateinamens-String alle Möglichkeiten mir Groß/Kleinbuchstaben durchprobieren?

03.04.2009 - 19:22 Uhr

Es funktioniert aber eben nicht. Ich habe das selbstverständlich ausprobiert, bevor ich gefagt habe. 😉

03.04.2009 - 19:06 Uhr

Hi,

ist es möglich bei File.Exists die Groß/Kleinschreibung zu ignorieren?
Also z.B. die Datei heißt "Datei.bla", dann soll File.Exists("DATEI.BLA") true geben, aber File.Exists("datei.bla") ebenfalls wie auch File.Exists("Datei.bla").
Ist das möglich, ohne beide separat abfragen zu müssen? Es steht nämlich nicht immer genau fest, ob und welcher Buchstabe anders geschrieben wird.

Danke.

19.12.2008 - 20:13 Uhr

Danke. Auch wenn der Artikel nicht meine eigentlichen Fragen beantwortet, kommt man mit Copy/Paste schon recht weit. 😉

Ich bin jetzt schonmal soweit, dass ich keine Fehler mehr bekomme, die sich auf falsche Parameter (Key size usw.) beziehen.
Ich will AES/Rijndael im Modus OFB (Output Feedback) nutzen. Aber ich bekomme dabei immer die Meldung, dass der Modus für diesen Algorithmus nicht untestützt wird.

Deswegen hier mal eine grundlegende Frage:
Ist es mit Boardmitteln des .NET Frameworks überhaupt irgendwie möglich, AES im OFB Modus zu bekommen?

05.12.2008 - 20:27 Uhr

Hi,

ich versuche gerade den im .NET Framework implementierten AES-Algorithmus zu verwenden. Dazu habe ich diverse Fragen:
Was ist der unterschied zwischen
SymmetricAlgorithm aes = new AesCryptoServiceProvider();
und
Rijndael aes = Rijndael.Create();
?

Und wenn ich im aes.Mode = CipherMode.OFB arbeite, dann will ich ja nur die bytes haben, die dann verwendet werden können, um den Plain/Ciphertext zu ver/entschlüsseln (per XOR). Aber wie komme ich an dieses Byte-Array ran? Muss ich da ein Byte-Array, das mit Nullen gefüllt ist, "verschlüsseln"?

19.11.2008 - 18:06 Uhr

Ah, danke. Manchmal sieht man den Wald vor lauter Bäumen nicht... 😉

19.11.2008 - 17:41 Uhr

Hi,

ich spiele gerade etwas mit System.Security.Cryptography rum udn will einen AES im OFB Mode realisieren:


SymmetricAlgorithm aes	= new AesCryptoServiceProvider();
aes.Mode				= CipherMode.OFB;

Dabei bekomme ich immer den CS1519 als Fehler beim setzen von aes.mode.

Wo genau ist denn da der Fehler? Und ist das überhaupt die richtige herangehensweise an die Cryptofunktionen?

06.11.2008 - 20:28 Uhr

Ah, das wusste ich gar nicht. Hab schnell mal nach "C# Pointer" gegooglet:
Der Operator wird auf WP auch mit "=== *" bezeichnet, wobei der Stern für den Pointer steht.

Also kann man davon ausgehen, dass man das im normalen Leben niemals brauchen wird, oder?

06.11.2008 - 20:23 Uhr

Würde das nicht implizieren, dass es Pointer gibt? Aber die gibt es in C# ja nicht.

06.11.2008 - 20:14 Uhr

Hi,

ich hab beim stöbern auf Wikipedia gerade folgenden Artikel gelesen:
http://de.wikipedia.org/wiki/Vergleichsoperator

Dort steht in der Tabelle der Vergleichsoperator "===", der auf Identität prüft. Was genau ist in einer programmierssprache/der Informatik/boolschen Logik der Unterschied zwischen "gleich" und "identisch"?

Und die wichtigste Frage: wann und warum sollte ich das in C# verwenden/vermeiden?

11.10.2008 - 19:38 Uhr

Ah, OK, jetzt hab ich es. 😉

Ich erstelle also eine Klasse und benutze get{} um von außen drauf zuzugreifen. Funktioniert auch wunderbar. Danke.

11.10.2008 - 18:40 Uhr

Wie übersetzt man die mit SharpDevelop zusammen?

Und wenn ich "public" vor die arrays schreibe. gehts auch nicht.

11.10.2008 - 18:26 Uhr

Ich verwende SharpDevelop.

Also in der ausgelagerten Datei (arrays.cs) habe ich den gleichen NameSpace wie in der Hauptdatei (MainForm1.cs).
Dann komtm in der arrays.cs eine public class, die die statischen Arrays enthält.

Aber ich weiß nicht, wie ich jetzt drauf zugreifen kann.

11.10.2008 - 18:11 Uhr

Hi,

bei C++ z.B. kann man ja einfach Code in eine belibeige Datei auslagern und dann per "include 'dateiname' " einbinden.
Wie geht sowas bei C#?

Ich habe zwei relativ große statische und konstante Arrays, die ich gerne auslagern würde in eine leere .cs Datei. Aber wie kann ich dann darauf zugreifen?

03.10.2008 - 18:01 Uhr

Modulo? Ich dividiere hier doch nix. Inwiefern hilft mir das hier?

03.10.2008 - 17:11 Uhr

Achja, ansonsten ist mir keine Hochsprache bekannt, in der es eine Funktion zum Rotieren gibt. Evt. fällt jmd. eine ein?

Ich hatte eigentlich Delphi im Kopf, wo ich diese Behauptung aufgestellt hatte. Aber nach nochmaligen nachschlagen, musste ich feststellen, dass es das da auch nicht gibt. Jedenfalls nicht direkt: man kann da aber direkt per Inline Assembler "ror a, b" machen, also a um b nach rechts rotieren. Das hatte ich wohl in meiner Erinnerung fälschlicherweise direkt mit Delphi assoziiert.

Ansonsten danke, die Variante mit der einfachen ODER-SHIFT-Kombo war mir gar nicht eingefallen. Das sollte reichen. 😉

edit: hmm, irgendiwe geht's doch nich. Ich bin im umgang mit Bits noch nicht so geübt. Gibt es für diese Methode eine Beschränkung, wie weit man rotieren kann?

03.10.2008 - 16:48 Uhr

Ja, leider benötige ich direktes Rotieren.

03.10.2008 - 16:28 Uhr

Hi,

gibt es in C#/.Net eingebaute Operatoren oder Methoden, um Ganzzahlen bitweise zu rotieren? In anderen Sprachen heißen die ja immer so wie rotr/rotl oder ror/rol. Ich konnte leider in C# bis jetzt keine finden.

Danke.

13.09.2008 - 11:25 Uhr

Hi,

ich stehe gerade vor dem Problem, dass ich viele Eigenschaften von irgendwelchen Controls oft ändern muss. Je nachdem was der Benutzer anklickt. Dabei geht es meistens um die Eigenschaften Enabled und Visible, um dem Nutzer zu zeigen, was er zurzeit alles für Möglichkeiten hat (und ich nicht für jeden Knopf, der für die momentane Sizuation keine Funktion hat, eine extra Anweisung schreiben muss, die verhindert, dass sein OnClick ausgeführt wird).

Allerdings wird das mit mehr und mehr Controls (hauptsächlich Buttons und Checkboxen und sowas) sehr unübersichtlich im Code, weil ich ständig für alle Fälle sowas sagen muss wie


button1.enabled = false;
button2.visible = true;
// usw...
button7.enabled = true;

Und das halt für viele Fälle, da man ja nicht weiß, was der Benutzer anklickt. Da schleichen sich auch schnell mal Bugs ein, wenn man ein Control irgendweo vergessen hat.

Deswegen meine Frage: Kann man so eine Situation irgendwie effizienter programmieren? Welche Möglichkeiten gibt es, komplexere GUIs effizient zu kontrollieren (besonders wenn der Zustand eines Elements von anderen abhängt)?

13.09.2008 - 11:08 Uhr

Ah, danke. Genau diese Einstellung hab ich gesucht.

Wieso gibt es eigentlich HideSelection mit der Standardeinstellung true? Sollte es nicht eher ShowSelection (mit vorzugsweise true als Standard)? Das wäre meines Erachtens logischer (und hätte mich diese Frage nicht stellen lassen, da ich es direkt gefunden hätte).

13.09.2008 - 10:16 Uhr

Hi,

ich habe ein kleines Problem mit der Darstellung eines treeViews. Wenn man eine Node anklickt wird die ja markiert. Aber sobald das treeView den Focus verliert, verschwindet diese Markierung ja. Wenn man dann aber viele ähnliche Einträge untereinander hat, kann es schnell unübersichtlich werden, wenn man nicht mehr weiß, welchen man markiert hatte.

Ist es irgendwie möglich, dem treeView zu sagen, dass er die Markierung der selectednode nicht entfernt (oder es zumindest anders einfärbt), wenn es den Focus verliert? In vielen Programmen ist das ja so, dass das dann grau wird, z.B. Sowas in der Art hätte ich auch gern.

13.04.2008 - 11:02 Uhr

Hi,

wie man MP3-Dateien mit Boardmiteln abspielen kann, habe ich schon rausgefunden (winmm.dll). Mir liegen aber rohe MP3-Daten in einem FileStream vor (also ohne irgendwelche Header, etc.)
Gibt es eine Möglichkeit, diesen Stream direkt mit Boardmitteln abzuspielen, ohne vorher eine temporäre Datei anlegen zu müssen?

Danke

12.04.2008 - 21:36 Uhr

Hi,

ist es irgendwie möglich sein eigenes PixelFormat zu definieren?

Ich benötige das Format 4444, also die Farbwerte (ARGB) sind jeweils in ein halbes Byte gepackt. Das ist aber standardmäßig nicht dabei.

Danke schonmal.

12.04.2008 - 14:57 Uhr

Ah, danke. Den werd ich mir mal näher anschauen. Hört sich sehr vielversprechend an.

12.04.2008 - 14:30 Uhr

Hi,

ich habe eine Frage zur Regex-Replace-Methode. Ich habe den Regex-Guide hier im Forum schon gelesen, folgende Frage wurde mir da aber nicht beantwortet.

Ist es mit Regex möglich, die einzelnen Bytes des Strings auch als solche zu behandeln? Also das ich mit Regex Replace quasi auch Rechenoperationen auf die zugrundeliegenden Hexwerte Einfluss nehmen kann.

Also mal ein Beispiel.
Ich habe z.B. den String "Hallo" und abhängig von der position des einzelnen Zeichens wird eine bestimmte Rechenoperation darauf ausgeführt. Zum Beispiel "Hex(Ausgangsbuchstabe) + Position".
Also mal als Pseudocode:
Char(Hex("H") + 1), Char(Hex("a") + 2), Char(Hex("l") + 3), Char(Hex("l") + 4), Char(Hex("o") + 5).

Und dieser neue String ist dann der Rückgabewert.

Ist sowas möglich? Und welche Operationen wären da überhaupt möglich? Auch Bitoperationen, wie XOR?
Wenn nicht, was ist die schnellste Möglichkeit sowas zu bewerkstelligen?
Also ich habe es schon versucht, direkt mit Strings. Also "string += neues_zeichen", das war aber sehr rechenintensiv, weil jedesmal ein neues Stringobject erzeugt wird. Mit StringBuilder ist es wesentlich schneller, aber ich muss mich ja quasi auch selbst um die berechnung kümmern, indem ich jeden einzelnen Buchstaben durch die Berechnen-Funktion schicke und zurückgeben lasse.
Deswegen wäre so eine Variante wie Regex, wo man einmal das Muster angibt und dann einfach den String reinschickt schon eine feine Sache.

Achso, was ich vielleicht dazu sagen muss:
Bei mir kommen aber die einzelnen Bytes nacheinander an. Ich kann die also quasi direkt durch die Berechnung schicken und dem StringBuilder anhängen (so mach ich es zurzeit). Dacht aber, dass es evtl eleganter wäre, zuerst einen String mit dem StringBuilder zu basteln und den dann als ganzes durch die Replace-Methode schicken, die dann mit einem rutsch das macht, was ich vorher für jedes Zeichen einzeln gemacht habe (also quasi genau andersherum).

Eine andere Idee wäre noch, dass ich zuerst ein festes Array erstelle (ich weiß vorher, wie viele Zeichen kommen), dann mittels eine Schleife jedes einzelne Element durch die berechnung schicke und dann das Array zum String konvertiere.
Wäre diese Variante besser als es direkt zu berechnen und einem Stringbuilder zu übergeben?

Also mir geht es hauptsächlich um die Performance, weil ich sehr viel Text auf diese Weise verarbeiten muss.

Danke schonmal. 🙂

14.03.2008 - 20:50 Uhr

Aber mit normalen Strings bestand das Problem ja auch.

14.03.2008 - 19:55 Uhr

[Problem gelöst, siehe edit am Ende dieses Posts]

Hi,

ich habe gerade ein merkwürdiges Problem. Ich habe eine foreach-Schleife, die jedes Value einer Hashtable durchläuft. Diese Values sind jeweils eine eigene Klasse, die (neben anderen) eine Eigenschaft des typs String haben.


class myClass{
  string foo;
}

/*
jetzt werden mehrere Instanzen dieser Klasse in einer Hashtable ht abgelegt, alle bei einem anderen Key, das wurde überprüft!
\*/

StringBuilder sb = new StringBuilder();
foreach(myClass mc in ht.Values)
{
  sb.Append(mc.foo);
}
MessageBox.Show(sb.ToString());

Das Problem ist nun folgendes: Die MessageBox gibt jeweils nur einen einzelnen string foo aus (aber immer den gleichen), nicht den zusammengesetzten.
Wenn ich aber in die foreach-Schleife nochmal eine extra MessageBox, die mir jeweils das aktuelle mc.foo anzeigt, zur Probe mache (um sicherzugehen, dass auch wirklich alle strings erstens da und zweitens verschieden sind), wird das korrekte angezeigt (damit kontne ich auch überprüfen das alle Values wirklich durchlaufen werden).
In der MessageBox nach der foreach-Schleife enthält sb aber nur ein einziges mc.foo. Aber da, wie gesagt, jedesmal das gleiche. Aber das wiederum (jetzt wird's noch kurioser!) eines mitten aus der Mitte der ht.Values, obwohl die nachfolgenden Elemente problemlos durchlaufen werden!
Eine Exception wird nicht gewurfen. Nur das Endergebnis ist einfach nicht aus den einzelnen strings zusammengesetzt.

Ich habe es nicht nur mit StringBuilder, sondern auch mit normalen strings versucht (string s += mc.foo). Selbes Problem.

Aus irgendeinem Grund wird der String einfach überschrieben anstatt erweitert (und selbst das wird mittendrin abgebrochen).

Zuerst dachte ich, irgendein anderer Code des Programms würde irgendwie damit intereferrieren, deswegen habe ich den Test mal in einem frischen und leeren Projekt (das nur die myClass, ein paar Testinstanzen derselben in ht und diese foreach-Schleife enthält) getestet: Selbes Problem.

Hat einer eine Idee?

edit: Hab den "Fehler" gefunden. Wobei ich mir aber nichtmal sicher bin, warum das überhaupt ein Fehler ist:
Ein paar dieser Strings enthielten das Zeichen (char)0 am Ende. Das muss irgendwie dazu geführt haben, dass der gesamte alte String gelöscht wird.
Aber (char)0 heißt doch einfach nur "hmm, hier kommt kein Zeichen" und nicht "alles andere löschen", oder nicht?

13.03.2008 - 17:37 Uhr

Das hatte ich schon gelesen. Deswegen ja der Thread, weil da nicht alles beantwortet wird. 😉

Hier nochmal die Fragen, zusammengefasst, die da nicht beantwortet werden:

  • Is ist schneller als As, ja, aber ist es auch schneller als ein direkter Cast?
  • Bei mehreren Casts lieber eine Zwischenvariable erstellen, auf die dann ohne Casts zugegriffen wird, oder lieber mehrfach die Ausgangsvariable casten?
13.03.2008 - 17:23 Uhr

Hi,

wie man dem Titel unschwer entnehmen kann:
Welches casting sollte man verwenden? Gibt es irgendwelche Besonderheiten oder Performanceunterschiede, oder andere Bedenken?

Und wenn ich die Variable mehmals brauche, sollte ich lieber mehrmals casten oder lieber eine Zwischenvariable dieses Typs anlegen und auf die dann ohne zu casten zurückgreifen?

Danke.

08.03.2008 - 20:11 Uhr

Vielen Dank. Dann ist das genau das, was ich brauche.

08.03.2008 - 20:03 Uhr

Sieht ganz brauchbar aus. Habe ich das aber richtig verstanden, man braucht unbedingt erstmal das unsortierte Dictonary und erstellt dann ein neues sortiertes Dicrtonary? Oder kann man auch gleich ein SortedDictionary erstellen, was bei einkommenden Daten quasi "live" sortiert?

08.03.2008 - 19:51 Uhr

Ich steh gerade vor folgendem Problem:
Ich brauche einen Listentyp, der sortiert werden kann (nach Key oder Index). Ich weiß vorher allerdings weder, wie viele Elemente reinkommen (--> normales Array[] geht nicht), noch in welcher Reihenfolge dann die einzelnen Daten kommen (--> ArrayList geht nicht). Deswegen müsste es in gewisser Weise nach Key sortierbar sein (--> Hashtable geht also auch nicht).
Gibt's da irgendwas?

Also ich mach mal ein Beispiel wie die Daten kommen könnten:

Index 5: Liste_an_index_5.Add("Hallo")
Index 3: Liste_an_index_3.Add("bla")
Index 6: Liste_an_index_6.Add("blubber")
Index 5: Liste_an_index_5.Add("foo")
Index 1: Liste_an_index_1.Add("bar");

Wie man hier auch sieht, kommt "Index 2" gar nicht vor.
Alle Indexe sind aber auf jedenfall positive Zahlen.
Nun sollen die sortiert werden, dass am Ende das Ganze so aussieht:

Liste[1]: "bar"
Liste[3]: "bla"
Liste[5]: "Hallo", "foo"
Liste[6]: "blubber"

Bis zum Sortieren wäre ja eine Hashtable ganz hervorragend, aber wie gesagt, ich brauche es ja sortiert, was eine Hashtable nicht kann...

Ist sowas irgendwie möglich?

Oder kann man einer ArrayList irgendwie sagen, dass sie, wenn z.B. als erstes Index 6 kommt, sie 6 Einträge erzeugt, wovon die ersten 5 erstmal leer bleiben (die dann aber später auch gefüllt werden können)? Und wenn dann Index 8 kommt, wird um zwei erweitert, usw.
Wenn das irgendwie gehen würde mit einer ArrayList, wäre mein Problem gelöst.

08.03.2008 - 10:18 Uhr

Moment, jetzt nochmal zum mitschreiben:
Welche müssen installiert sein, damit alle .NET Frameworks abgedeckt sind?

Die drei?

  • 1.0
  • 1.1
  • 3.5

Hab ich das jetzt richtig rausgelesen? Wenn ich die (und nur die) installiert habe, kann ich jedes .NET Program ausführen?

Gelten für die SDKs die gleichen Regeln? Also, wenn ich jetzt z.B. alle SDKs deinstalliere und nur 3.5 installiere, kann ich dann mit #develop 2 ganz normal für das .NET Framework 2.0 weiterentwickeln?
Oder muss ich dann das neue #develop 3 verwenden (und kann dann evtl. nur noch im .NET 3 entwickeln?) ?

Danke für die Aufklärung.

05.03.2008 - 11:03 Uhr

Selbes Problem:
"Ganzzahlwert erwartet".

05.03.2008 - 10:54 Uhr

Hi,

ich habe im Internet einige Beispiele gefunden, wie man einen Type per GetType und typeof in einem switch abfragen kann.

In meinem speziellen Fall habe ich eine Hastable in der mehrere Typen vorkommen können, deswegen wollte ich die so halt abfragen.
Wenn ich aber "typeof(table[pfad])" abfrage sagt er, "Die Array größe kann nicht in einer Variablendeklaration angeben werden".

Daraufhin habe ich folgendes versucht:


Type T = table[name].GetType();

switch(typeof(T))
{
 case typeof(int): 
  //code
  break;

 case typeof(byte):
  //code
  break;

  //usw.
}

Dann tritt allerdings immer das Problem auf, dass er mir sagt, in dem switch wird ein Ganzzahlwert erwartet. In den ganzen Beispielen, die ich gefunden habe, sah der switch Block aber exakt so aus wie hier, und da scheint's ja zu funktionieren.

Jetzt habe ich keine Idee, wie ich den Type noch abfragen könnte. Hat einer eine Idee?

Danke.

26.02.2008 - 10:38 Uhr

Hi,

Wie DeflateStream verwendet wird, weiß ich. Funktioniert auch sehr gut.
Der Post betieht sich auf CompressionMode.Decompress.
Dem DeflateStream übergibt man ja einen Stream, der die komprimierten Daten enthält.

Meine Frage lautet nun:
Setzt DeflateStream die Position des übergebenenStreams auf 0 zurück oder fängt der an der Stelle zu inflaten an, wo sich der übergebene Stream gerade befindet?
Also z.B.:
Ich habe eine Stream, aus dem lese ich fleißig irgenwelche Daten aus. An einer bestimmten Stelle taucht jetzt ein Deflate-Komprimierter Bereich auf. Kann ich dann den Stream einfach an Deflate übergeben und der dekomprimiert das dann und dann geht's ganz normal weiter? Oder muss ich den komprimierten Block erst aus dem ersten Stream in einen neuen Stream kopieren und diesen dann an DeflateStream übergeben, weil Deflate nicht mittendrin im übergebenen Stream anfangen kann?

22.02.2008 - 19:55 Uhr

Schön, das weiß ich auch. Aber welche Klassen oder Funktionen brauche ich dafür in C#?

22.02.2008 - 19:40 Uhr

Hi,

ich arbeite jetzt zum ersten mal mit WebClient. Und ich suche da verzweifelt nach einer Möglichkeit, zu prüfen, ob eine Remote-Datei existiert oder nicht, ohne sie direkt runterladen zu müssen.

Quasi nach dem Motto:
if(error 404)
{
MessageBox.Show("Datei nicht da");
}else{
MessageBox.Show("Datei da");
}

Wie geht das?
oder gibt es noch eine andere Web-Klasse, ausser dem WebClient, die das eventuell bietet?

21.02.2008 - 12:35 Uhr

Hi,

Also Einträge ins TreeView ablegen (per Rekursion) und die Auswahl-Handler funktionieren bei mir alles sehr gut.

Meine Frage:
Wie aber speichere ich am besten die Daten, auf die vom TreeView aus zugegriffen wird?
Also der Benutzer klickt auf einen TreeView-Eintrag und dann werden die jeweiligen Daten angezeigt.

Ich hab das im Moment so, dass ich eine Hashtable habe, in der alle Pfade des TreeViews und jeweils die dazugehörigen Daten abgelegt sind. beim Klick auf einen Eintrag wird dann der jeweilige Eintrag der Hashtable genommen, geprüft was für ein Datentyp drin ist und dann entsprechend ausgegeben.
Aber das erscheint mir etwas "billig".

Gibt es da eine elegantere Alternative, einem TreeView-Eintrag bestimmte Daten zuzuordnen? Könnte man die Tag-Property der jeweiligen Node verwenden, oder gibt es da irgendwelche Bedenken oder Performanceverluste?

31.01.2008 - 23:23 Uhr

Hi,

ich habe bei ein Problem bei der Bitmap.Save Methode.

Ich habe schon gelesen, dass es da wohl manchmal Probleme gibt, wenn man das Bild aus einer Datei lädt und dann speichern will.

Bei mir existiert aber noch gar keine Datei, sondern das Bitmap wird direkt im Programm erzeugt (mit SetPixel). Trotzdem kommt der Allgemeine GDI+ Fehler.

Was dabei noch merkwürdig ist: Wenn ich das Bitmap erst in eine PictureBox lade und die Save-Methode von PictureBox.Image verwende funktioniert es ohne Probleme (ohne dass das Bitmap vorher disposed oder sonstwas wurde).
Aber direkt mit Bitmap.Save geht es nicht.

Also bmp.Save(path, ImageFormat.Png); geht nicht.
Aber über den Umweg pictureBox1.Image = bmp; PictureBox1.Save(path, ImageFormat.Png); geht's (selber Pfad, selbes Bild, selbe Datei [die wie gesagt noch gar nicht existiert]).

Mehr als ein paar fest definierte Pixel setzen und dann speichern macht das Programm nicht (weil ich nur das Bitmap-Objekt ausprobieren wollte).

Hab ich irgendwas übersehen oder vergessen?

edit: Hmm, kann es sein, dass Bitmap.Save keine (Unter-)Ordner anlegen kann, sondern nur direkt Dateien in bereits vorhandenen Ordnern? Wenn ich nämlich den Pfad so angebe, dass die Datei direkt in einem existierenden Ordner gespeichert wirdm geht's. Wenn ich zwischen Dateiname und Ordner noch einen Unterordner schiebe (path + "\bla\" + filename), wobei "bla" nicht existiert, geht's nicht.

10.09.2007 - 19:08 Uhr

Original von DavidT
Die Illusion das man hier fertige Antworten bekommt mußte ich auch schon ablegen, die Herren hier geben immer nur Tips... 🙂 Und mittlerweile versteh ich auch warum... g

Wenn ich aber selbst lange suchen soll, dann brauche ich kein Forum.
Das ist sowieso so ein generelles Problem, was neuerdings überall auftaucht: Man wird immer zu irgendeiner Suche oder zu Google verwiesen.

Ist es so schwer, konkrete Antworten zu geben? Wer nicht konkret antworten will, der wird von niemanden gezwungen überhaupt zu antworten (also auch nicht "Geh zu Google!" oder irgendsowas).

Ein Forum ist nunmal für Leute da, die schnell eine Antwort haben wollen, auch wenn es irgendwo schon beschrieben steht.
Klar kann ich lange bei Google und und in irgendwelchen Foren suchen (und werde dabei meistens auch fündig). Aber einfach meine konkrete Frage stellen, geht nunmal einfacher und schneller. Und wie gesagt, wem diese Einstellung nicht passt, der muss diesen Fragesteller auch nicht mit irgendeinem "neunmalklugen" Verweis zu irgendeiner Suche kommen (und könnte stattdessen die Frage einfach ignorieren).

Nicht falsch verstehen: Ich befrage immer erst Google oder eine andere Suche, die gerade zur Verfügung steht. Aber wenn ich dabei (unter den ersten zwei-drei Ergebnis-Seiten) nicht das passende finde oder erst seitenlange Texte lesen müsste, dann stelle ich lieber gleich meine konkrete Frage, in der Hoffnung, dass ich auch eine gute Antwort bekomme.

10.09.2007 - 09:48 Uhr

Danke, genau das wollte ich wissen. "Nein, es geht nicht" ist auch eine Antwort.