Laden...

Forenbeiträge von Ravyle Ingesamt 18 Beiträge

24.03.2012 - 21:51 Uhr

Guten Abend,

Ich sitze hier wieder an einem kleinen Problem:

Ich habe mehrere Dateien, die ich einlesen will, die aber ein eigenes Format haben, sprich sie sind nicht static.
Daher habe ich mir immer verschiedene Klassen erstellt für jede datei, die dann eine public variable haben (für eine List später).

Ich möchte die Datei ungefähr so einlesen (folgendes ist einfach nur zum erklären, kein reeler code):

foreach(variable in class) {
    if(variable == typeof(int))
         binaryReader.ReadInt32();
}

undsoweiter.

Ich habe schon eine kleine Idee bekommen, wie ich das machen könnte, leider funktioniert das aber nicht so, wie ich es will.

Hier mein Testcode:

       void test()
        {
            classone j = new classone();
            FieldInfo[] _fi = typeof(classone).GetFields(BindingFlags.Instance | BindingFlags.Public);
            foreach (FieldInfo fi in _fi)
            {
                if (fi.FieldType == typeof(Int32))
                {
                     fi(.SetValue, was auch immer. :D) = binaryReader.ReadInt32();
                }
            }
        }

Leider macht er das nicht mit. Ich hatte in einem vorherigen Beispielcode am Ende des codes eine MessageBox gemacht, die hat er mir aber nie ausgegeben - Obwohl er es theoretisch müsste. Einen Fehler habe ich aber auch nie bekommen.

Habe ich dort irgendwie einen kleinen Denkfehler oder gibt es diese Möglichkeit überhaupt nicht?

Grüße,

Ravyle.

18.02.2012 - 11:48 Uhr

verwendetes Datenbanksystem: SQL Server 2008 R2 Express

Hallöchen,

Ich sitze grade an einem kleinen Problem:
Ich habe gestern meinen Server neuinstallieren lassen, da es dort ein Festplattenproblem gab.

Da ich jeden Tag immer ein Backup meiner Datenbank mache, hatte ich auch kein Problem mit verlusten.

Nur jetzt habe ich ein kleines Problem beim wiederherstellen:

Die BackUp-Datei ist ~950mb groß. Wenn ich dies per SQL Server Managememt Studio wiederherstellen lasse, lädt er bis 100%, und "hängt" sich dann fest, sprich, er lädt sich trotz allem dort zu Tode.

Ein bekannter hatte mir dann gesagt, das es an einem zu großen Transaction-Log liegen kann...

Gibt es irgend einen Weg, diese Datenbank wiederherzustellen?

07.02.2012 - 16:04 Uhr

Na super, das sagt man mir erst jetzt? 😁

Ich habe größtenteils immer versucht, Properties zu vermeiden, und habe mich damit nie beschäftigt, aus dem einfachen Grund, weil ich meist zu Faul war, das ganze get { hier = da } [...] zu schreiben, aber mit { get; set; }... Geht ja noch viel einfacher.

Danke euch, funktioniert nun einwandfrei! 😉

07.02.2012 - 14:09 Uhr

Ok, kleine Info nachdem ich ein bisschen getestet habe:

  • DataGridView erstellt die Columns nicht automatisch, trotz dataGridView1.AutoGenerateColumns = true;

So nebenbei: Meine Liste ist in etwa so aufgebaut:

class skillresy
{
public Int32 id = 0;
public String icon_file_name = null;
// Und noch so 120 Einträge weiter....
}

Liegt das vielleicht daran, das ich nicht mit diesem get-set Zeugs gearbeietet habe?

  • Nachdem ich eine test-Column hinzugefügt hatte, erstellt er mir zumindest list.count Zeilen, die dann aber überhaupt keinen Wert haben (nicht einmal die erste Value der Liste).
07.02.2012 - 13:07 Uhr

Heyho,

Danke erstmal für die Antwort.

Ich habe es eben mal etwas anders getestet, und zwar so:


                foreach(skillresy it in sk)
                skillres.Rows.Add(it.id.ToString(), it.icon_file_name);

Diese Werte sind nicht leer und immer "verschieben", sprich, genau die, die ich haben möchte.

Die Liste ist somit gefüllt.

Ich verstehe nur nicht, warum diese nicht per DataSource im Grid angezeigt werden...

07.02.2012 - 12:42 Uhr

Guten Morgen, erstmal.

Mittlerweile bekomme echt eine Kriese mit dem DataGridView...

Ich habe eine Liste(T) mit ~130 Werte, die eingetragen werden müssen.

Diese werden durch das Einlesen einer Datei gefüllt, soweit funktioniert alles Prima.

Nun kommt aber das Problem mit dem DataGridView, das diese Liste anzeigen soll:
Nach etlichen Probieren und Googeln habe ich es einfach aufgegeben, und wende mich nun mal wieder an euch:

Ich habe folgenden Code:


        public List<skillresy> sk = new List<skillresy>();

        private void openSkillRes()
        {
            
            try
            {
                FileStream av = File.Open(openskillress.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                BinaryReader br = new BinaryReader(av, Encoding.ASCII);
                br.ReadChars(128);
                int _count = br.ReadInt32();
                while (br.PeekChar() != -1)
                {
                    skillresy _v = new skillresy();
                    _v.ReadFile(br);
                    sk.Add(_v);
                }
                MessageBox.Show(sk.Count.ToString()); // ist am Ende dieselbe Zahl wie _count
                dataGridView1.DataSource = null;
                //dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = sk;
                br.Close();
                av.Close();
            }
            catch
            {
                MessageBox.Show("Error while loading this file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Dazu habe ich auch ein Leeres DataGridView, sprich ohne Columns oder sonstiges, da es diese Automatisch erstellen soll.

Wenn ich nun die Datei öffne, wird alles ausgeführt, ich bekomme keinen Fehler angezeigt, das DataGridView bleibt aber trotz allem leer.

Ich habe es bereits mit einer BindingList anstatt List probiert, außerdem habe ich dazwischen noch eine BindingSource probiert.

Wo ist der Fehler?

Grüße,

Ravyle.

29.01.2012 - 14:20 Uhr

Hey Cat,

erst einmal danke für die schnelle Antwort.

Ich habe mir das mit der DataTable mal genauer angeschaut, und ein bisschen herumprobiert.

Mit der DataView.Sort-Eigenschaft habe ich dann letzendlich das geschafft, was ich will.

            dv = dt.DefaultView;
            dv.Sort = "File, offset ASC";

Habe mir diesen Part mal in's form_loading-Event geholt.

Grüße,

Xijezu.

29.01.2012 - 12:25 Uhr

Guten Morgen,

Ich habe momentan ein kleines Problem mit meiner DataGridView.

Ich habe mehrere Columns, unter anderen File & Offset, die geordnet werden sollen.

Ich möchte, das das am Ende ungefähr so aussieht:

File | Offset

file1.a | 4886
file1.a | 4897
file1.a | 9874
file2.a | 41
file2.a | 79

Aus dem Grund lasse ich es immer so ordnen:

                dataGridView1.Sort(list_offset, ListSortDirection.Ascending);  
                dataGridView1.Sort(list_file, ListSortDirection.Ascending);  

Das Problem an der ganzen Sache (was im Prinzip ja ziemlich Logisch ist), ist, das es am Ende dann nur die File-Spalte ordnet.

Gäbe es eine Möglichkeit, das so hinzubekommen, wie ich es möchte?

Und so nebenbei: Ich arbeite mit keiner Datenbank, möchte es aber auch sehr stark vermeiden.

Grüße,

Ravyle.

Edit:
Nebenbei: Gesucht habe ich schon, leider aber nichts gefunden. Die Doku sagt mir auch nicht das, was ich wissen will, so muss ich wohl doch Rat bei euch wieder suchen 😉

22.01.2012 - 09:14 Uhr

Würde ich im Prinzip machen, das Problem daran ist aber, das die Dateien (sind genau 8) verschlüsselt sind (das Problem ist gelöst) und bis zu 1 GB groß sind.

Wenn ich dann dort ein Part ändern will, der bsp. im Offset 844403780 ist, dann hätte ich dort 'nen kleines Problem, da dies nun Ewig dauern würde.

22.01.2012 - 03:36 Uhr

Heyho,

Ich hätte eine kleine Frage zum BinaryWriter.

Und zwar möchte ich, ich sage mal, eine Datei "Patchen", sprich ab einer bestimmten Stelle die Bytes ersetzen.

Nun habe ich aber das Problem: Was ist, wenn der zu Patchende Inhalt größer ist, als der Alte?

Der BinaryWriter ersetzt ja den alten Part. Wenn der Patchende Inhalt größer ist, wird ja das, was nach dem alten Inhalt steht, auch ersetzt. Dies möchte ich aber vermeiden.

Gäbe es dafür eine Möglichkeit?

Edit:
Okay, eine andere Möglichkeit für mich wäre noch, den Inhalt an das Ende der Datei zu hängen, das Problem am ganzen ist aber, ich kann den Inhalt des Alten nicht löschen. Gibt es dafür eine Möglichkeit?

03.01.2012 - 09:47 Uhr

Die Länge verändert sich jedes mal.

sprich manchmal kann der komplette Eintrag (gruppe, inhalt, id) nur 20 Wörter sein, manchmal aber kann Inhalt auch eine ganze Beschreibung sein.

Somit bräuchte ich die Möglichkeit, die Datei einmal ganz als Hex einzulesen, und dann jeweils zu splitten.

Oder verstehe ich da grad' was falsch?

Bin jetzt nicht ganz Erfahren in C#, kenne jediglich meistens immer nur das, was ich brauche und öfter verwende, wobei Daten öffnen/schreiben genau nicht dabei ist.

03.01.2012 - 09:33 Uhr

So, okay.

Habe nun ein anderes Problem:

Ich werde die Datei nun erstmal als HEX öffnen, nur wie Splitte ich ab einer bestimmten länge?

Also string.Split() kann ja nur eine bestimmte Länge haben.

Wenn ich bei "00 00 00 00 00 00" splitten möchte, gäbe es dafür eine Möglichkeit= 8o

03.01.2012 - 08:47 Uhr

Sieht soweit Vielversprechend aus.

Ich glaube, ich habe dadurch eine gute Idee bekommen, ich versuch' mal was, und melde mich danach.

Danke dir!

03.01.2012 - 07:40 Uhr

Guten Morgen allerseits,

Heute sitze ich mal an einem anderen Problem, und zwar:

Ich möchte eine Datei mit einem Unbekannten Dateiformat einlesen, das von einem anderen Programm erstellt wurde.

An sich ist sie So aufgebaut:

.............................name_item_010009.Diesunddas.å]ú.............................name_item_010009.Diesundjenes.æ]ú

die Punkte in dem Fall stehen hier natürlich für Hex-00.

name_item_[...] = Gruppe
Diesunddas = "Inhalt"
Komische Zeichen = Zahl (ID) in HEX.

Da ich bisher eigentlich nie ein Fremdes Fileformat eingebunden habe, bzw. kaum mit externen Dateien gearbeitet habe, bräuchte ich einen kleinen Gedankenanstoß.

Wie könnte ich dies am besten lösen?
Gruppe + Inhalt sind ja im "normalen" Format, wogegen die ID/Zahl im HEX-Format gespeichert ist.

Danke für's lesen und danke schonmal für die Antworten,

Ravyle.

09.12.2011 - 14:37 Uhr

Ich habe das Gefühl, wir reden aneinander vorbei.

Nehmen wir ein anderes Beispiel.
Details der verbindung:

Externe IP: 85.245.78.666 (Root-Server, Verbindung wie z.B. Website)
Client-IP: 169.254.1.1 (PC/Laptop, IP des VPN's)
Server-IP: 169.254.2.2 (Root-Server, IP des VPN's)

Die Externe IP benutze ich als "normale" IP, um die Verbindung mit dem VPN herzubekommen (Port 1433 dicht).

Die Client-IP bekommt mein PC/Laptop ja, wenn ich erfolgreich verbunden ist.

Die Server-IP wäre dann die Interne VPN-IP des Servers, wo Port 1433 offen ist. Und genau diese möchte ich haben.

Ich bekomme grundsätzlich nur die Client-IP, also meine IP heraus.
Ich möchte aber die Server-IP herausfinden, da sich diese ja nach Neustart des Server's immer wechselt, und ich diese meinem Team nicht jedes mal ändern lassen möchte.

08.12.2011 - 21:30 Uhr

Es ist ja mit Absicht so, das die Datenbank nur per VPN erreichbar ist, und ich möchte das eigentlich ziemlich ungerne ändern.

Der Port 1433 wird in dem Netz halt an einen anderen Port des Datenbankrechners weitergeleitet. An den müsstest du über die lokale Adresse dann rankommen.

Den Part verstehe ich nicht ganz, könntest du mir genauer erklären, was du damit meinst?

08.12.2011 - 21:19 Uhr

Habs mal versucht, mit 'nem Screen deutlich zu machen.

08.12.2011 - 20:51 Uhr

Hallo,

Ich versuche momentan ein Programm zu erstellen, das ein Paar SQL-Querys benutzt, etc.

Die Datenbank liegt auf einem Root-Server, die Datenbank ist nur per VPN-Verbindung erreichbar.

Da sich die Server-IP bei jedem Neustart des Server's verändert, möchte ich diese gerne von Windows beziehen.
Wer nicht genau weiß, was ich meine:
VPN-Verbindung herstellen -> Eigenschaften -> Details -> Server-IP.

Ich habe jetzt schon unendlich lange gegoogelt und die MSDN-Doku gelesen, System.Net.Dns bringt mir nur die Client-IP.

Gibt es dafür eine Möglichkeit?