über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Gast-110
Beiträge: 11
Registriert: So Jan 02, 2011 1:40 pm

über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Gast-110 » So Jan 02, 2011 2:02 pm

Ich will eine Datei einer > Windows-Forms-Anwendung < über einen > OpenFileDialog < öffnen und dann > wahlfreien Zugriff < darauf erhalten. Der letzte, zugegeben etwas unkonventionelle, Versuch bringt zwar beim Schreiben keine Fehlermeldung. Im Debugger läuft es dann aber doch nicht, da das Array gar keinen Inhalt hat :oops:
Es muss kein Array sein, ein Stream / MemoryStream gänge auch - nur eben was mit wahlfreiem Zugriff.

Hier der Problem-Code:

Code: Alles auswählen

        private void button1_Click(object sender, EventArgs e)
        {
            // Variablendeklaration:
            Byte test = 0;

            string in_string = "", out_string = ""; // "fast" nutzlos ... 
            long in_arr_gr = 0; // Größe der Original-Datei (gepackt)
            long out_arr_gr = 0;// Größe der Entpackten Datei - größer geschätzt !!!
            byte[] in_array = null;   // unten initialisiert
            byte[] out_array = null;  // unten initialisiert
            
            // Prog. selbst:
            // Datei öffnen in Var. "in_string"
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Alle Dateien (*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
                in_string = ofd.FileName;
            // Datei öffnen in Array "in_array"
            FileStream in_stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
            BinaryReader br1 = new BinaryReader(in_stream);
         // in_array = new byte[in_arr_gr]; // Größe der Original-Datei - entfällt weg. " = null" ???
            in_arr_gr = in_string.Length;
            in_array = br1.ReadBytes((int)in_arr_gr);

            out_arr_gr = in_arr_gr * 2; // die Datei kann so nur doppelt so groß werden !!!
            out_array = new byte[out_arr_gr];

// Hier müsste die eigentliche Routine stehen - jetzt einfacher 4-Byte-Kopier-Test
            test = in_array[0];
            out_array[0] = test;
            test = in_array[1];
            out_array[1] = test;
            test = in_array[2];
            out_array[2] = test;
            test = in_array[3];
            out_array[3] = test;


            
            // Datei speichern unter Var. "out_string"
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Alle Dateien (*.*)|*.*";
            if (sfd.ShowDialog() == DialogResult.OK)
                out_string = sfd.Filter = "Alle Dateien (*.*)|*.*";
            //  out_string = sfd.FileName;
            // speichern des Array - vorhandene Datei wird überschrieben !!!
            FileStream out_stream = new FileStream(sfd.FileName, FileMode.Create);
            out_stream.Write(out_array, 0, out_array.Length);
            out_stream.Close();

        }

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von cloidnerux » So Jan 02, 2011 2:14 pm

Dein code sieht jetzt etwas wirr aus, also versuche ich das ganze erst einmal zu verstehen.
Du willst eine beliebige Datei öffnen, sie komplett einlesen, sie "entpacken"(bearbeiten) und dann wieder speichern.
Dein Problem besteht jetzt in was?

Du solltest vlt auch nicht prüfen ob dein Dialog mit "OK" geendet ist, sondern ob er eben abgebrochen wurde, um dann deine Routine zu beenden, da du ansonsten beim Drücken von "Abbruch" im Dialog ein undefiniertes verhalten bekommen wirst.

Dann solltest du deinen code aufräumen, die ganzen auskommentierten Zeilen rausschmeißen und dann ein paar Breakpoints setzten, um dann mti hilfe des Debuggers zu sehen, wo du an welcher stelle welche Werte hast, und welche eben nicht.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Gast-110
Beiträge: 11
Registriert: So Jan 02, 2011 1:40 pm

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Gast-110 » So Jan 02, 2011 3:04 pm

cloidnerux hat geschrieben:Du willst eine beliebige Datei öffnen, sie komplett einlesen, sie "entpacken"(bearbeiten) und dann wieder speichern.
Exakt.
cloidnerux hat geschrieben:Dein Problem besteht jetzt in was?
Ich möchte den Dialog "OpenFileDialog" dafür benutzen. Aber ich kann das damit nur mit Strings. - Dann habe ich aber erstmal keinen wahlfreien Zugriff auf den Inhalt - ein simples Konvertieren in Array o.ä. scheint es aber nicht zu geben :(
cloidnerux hat geschrieben:Du solltest vlt auch nicht prüfen ob dein Dialog mit "OK" geendet ist, sondern ob er eben abgebrochen wurde, um dann deine Routine zu beenden, da du ansonsten beim Drücken von "Abbruch" im Dialog ein undefiniertes verhalten bekommen wirst.
Ist erstmal Nebensache ...
cloidnerux hat geschrieben:Dann solltest du deinen code aufräumen, die ganzen auskommentierten Zeilen rausschmeißen ...
Ich dachte, das hilft zu verstehen was das Prog. machen soll.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von cloidnerux » So Jan 02, 2011 3:20 pm

Ich möchte den Dialog "OpenFileDialog" dafür benutzen. Aber ich kann das damit nur mit Strings. - Dann habe ich aber erstmal keinen wahlfreien Zugriff auf den Inhalt - ein simples Konvertieren in Array o.ä. scheint es aber nicht zu geben :(
Ich glaube du verstehst nicht, was der OpenFileDialog macht.
Mit dem OFD kannst du den Nutzer eine oder mehrere Dateien auswählen lassen und du erhältst nur einen String mit den Dateipfaden.
Du musst dich dann selber darum kümmern die Dateien einzulesen.
Ansonsten verstehe ich dein Problem immer noch nicht so ganz
Frage formulieren
cloidnerux hat geschrieben:Dann solltest du deinen code aufräumen, die ganzen auskommentierten Zeilen rausschmeißen ...

Ich dachte, das hilft zu verstehen was das Prog. machen soll.
Kommentare helfen code besser zu verstehen, aber auch nur im Richtigen Maße.
Du hast aber auch noch viele Auskommentierte Zeilen, also code Zeilen, die du mit einem Kommentar unwirksam gemacht hast, sie verwirren nur.
Außerdem ist es durch die grüne Einheitsformatierung des Forums schwieriger zwischen code und Kommentar zu unterscheiden.
Ist erstmal Nebensache ...
Ordentliches programmieren erspart dir Stundenlanges debuggen, denn Langsam ist Präzise und Präzise ist schnell(Zitat aus dem Film "Shooter")
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Xin » So Jan 02, 2011 3:26 pm

Gast-110 hat geschrieben:Ich möchte den Dialog "OpenFileDialog" dafür benutzen. Aber ich kann das damit nur mit Strings. - Dann habe ich aber erstmal keinen wahlfreien Zugriff auf den Inhalt - ein simples Konvertieren in Array o.ä. scheint es aber nicht zu geben :(
Der OpenFileDialog lässt Dich eine Datei auswählen. Du bekommst den Namen der Datei zurück und weißt damit, welche Datei der Benutzer gerne geöffnet haben möchte.

Öffnen musst Du sie aber selbst.

Ich verstehe momentan noch nicht, welches Problem Du eigentlich hast. Den Link bzgl. Frage formulieren hast Du ja schon.

Kurz: Was erwartest Du von dem Programm, was macht das Programm stattdessen, gibt es Fehlermeldungen und wenn ja welche.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Gast-110
Beiträge: 11
Registriert: So Jan 02, 2011 1:40 pm

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Gast-110 » So Jan 02, 2011 4:59 pm

Habe das Projekt nochmal geladen und im Debugger laufen lassen - komischerweise gibt es jetzt keinen Fehler mehr - entschuldigt bitte, ist mir echt peinlich - ich werde es aber hinsichtlich lesbarkeit überarbeiten und den, wohl nutzlosen, "in_string" entfernen. Trotzdem danke.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von cloidnerux » So Jan 02, 2011 5:07 pm

Habe das Projekt nochmal geladen und im Debugger laufen lassen - komischerweise gibt es jetzt keinen Fehler mehr - entschuldigt bitte, ist mir echt peinlich - ich werde es aber hinsichtlich lesbarkeit überarbeiten und den, wohl nutzlosen, "in_string" entfernen. Trotzdem danke.
Muss dir nicht Peinlich sein, sei doch froh, das es jetzt anscheinend Funktioniert.
Aber mich Interessiert es immer noch, was für eine Fehlermeldung du hattest, bzw. ob dein Algorithmus funktioniert und du den richtigen Output erhältst.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Xin » So Jan 02, 2011 5:45 pm

Gast-110 hat geschrieben:entschuldigt bitte, ist mir echt peinlich
Programmierung ist immer peinlich... ich mache das jetzt seit 1986 und es hat immer noch nicht aufgehört... ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Gast-110
Beiträge: 11
Registriert: So Jan 02, 2011 1:40 pm

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Gast-110 » Mo Jan 03, 2011 11:02 pm

cloidnerux hat geschrieben:... Aber mich Interessiert es immer noch, was für eine Fehlermeldung du hattest ...
Ich weis nicht mehr genau - Das ist gerade für Anfänger immer recht "nichtssagend" - aber es was als ich aus der Variablen in das Array kopieren wollte (evtl. knapp daneben eine Zeile) - meine Vermutung war, das Array mit den Originaldaten enthält eben noch gar keine Daten - es wurde ja mit "null" initialisaiert ...
cloidnerux hat geschrieben:... bzw. ob dein Algorithmus funktioniert und du den richtigen Output erhältst.
Ja, habe es mit dem Hex-Editor geprüft. Das hilft mir sehr weiter - ich habe mich früher mal an Assembler versucht - jetzt ist alles einfach(er).

nochmal danke schön.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: über OpenFileDialog (Win-Forms-Anwendung) wahlfreier Zugriff

Beitrag von Xin » Di Jan 04, 2011 12:00 am

Gast-110 hat geschrieben:
cloidnerux hat geschrieben:... Aber mich Interessiert es immer noch, was für eine Fehlermeldung du hattest ...
Ich weis nicht mehr genau - Das ist gerade für Anfänger immer recht "nichtssagend" - aber es was als ich aus der Variablen in das Array kopieren wollte (evtl. knapp daneben eine Zeile) - meine Vermutung war, das Array mit den Originaldaten enthält eben noch gar keine Daten - es wurde ja mit "null" initialisaiert ...
Das klingt nach einer sinnvollen Erklärung.

Wenn Du eine Frage hier (oder auch anderswo) stellen möchtest, so schreib Dir den Fehler auf oder mach einen Screenshot mit der Zeile, wo der Fehler aufgetreten ist. So kann man Dir leichter helfen.

Und was das 'peinlich' angeht, ich werde mal bei Gelegenheit einen Text ins Wiki kopieren von meinem peinlichsten Programmierfehler, da ist ein Null-Pointer nix gegen ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten