Laden...

Byte Array - unbehandelte Ausnahme

Erstellt von Irina vor 2 Jahren Letzter Beitrag vor 2 Jahren 456 Views
I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren
Byte Array - unbehandelte Ausnahme

Hallo zusammen,

in meiner aktuellen Aufgabe soll ein Array aus einer Datei ausgelesen werden und auf der Konsole ausgegeben werden.
Egal, wie oft ich den Code verändere (ca. 50 mal bis jetzt), ich habe immer in Zeile 14 eine unbehandelte Ausnahme.
Letztendlich weiß ich einfach nicht, wo dabei mein Fehler liegt.

Hier mein Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ESAAufgabe2
{
    class Program
    {
        public void ESA2IN(string pfad, byte[] array)
        {
            FileStream stream = File.Open(pfad, FileMode.OpenOrCreate);
            stream.Write(array, 0, array.Length);
            for (int i = 0; i < array.Length; i++)
            {
                Console.Write((char)array[i]);
            }
            Console.WriteLine();
            stream.Close();
        }

        public void ESA2Out(string pfad)
        {
            StreamReader reader = new StreamReader(File.Open(pfad, FileMode.Open));
            int i;
            while ((i = reader.Read()) != -1)
            {
                Console.WriteLine("{0}", i);
            }
            Console.WriteLine();
            reader.Close();
        }

        static void Main(string[] args)
        {
            Program test = new Program();
            string pfad = @"C:\Users\admin\OneDrive\Dokumente\ILS\Einsendeaufgabe 19 CSH03B\ESA2.txt";
            byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
            test.ESA2IN(pfad, array);
            test.ESA2Out(pfad);
        }
    }
}

Ich hoffe, das ihr mir helfen könnt....
Vielen Dank

LG Irina

709 Beiträge seit 2008
vor 2 Jahren

Hallo Irina,
kannst du bitte ein paar mehr Infos zur Ausnahme geben?

4.938 Beiträge seit 2008
vor 2 Jahren

Hallo,

welche genaue Ausnahme (Exception) ist es denn? Schau mal unter "Ausnahmen" in der Doku dazu: File.Open.

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

Hallo zusammen,

ich habe ein Screenshot mit der Fehlermeldung angehangen....

LG Irina

C
33 Beiträge seit 2013
vor 2 Jahren

Moin,

Weisst du was in Zeile 14 von deinem Code Passiert?
Wenn ja dann Sagt die Fehlermeldung dir doch warum es da knallt!
Wenn nicht. Würde ich nochmal in deinem Kurs nach zugriff auf Dateien und Ordner suchen. Speziell nach dem Punkt zugriffsberechtigungen. Alternativ suchmal bei google ob man auf das Userverzeichnis so ohne Weiteres zugreifen kann.

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

Auch mit FileAccess.Write und FileShare.Write kommt die gleiche Meldung.
Mit der Dokumentation habe ich immer und immer wieder alles mögliche probiert, aber die Fehlermeldung verschwindet einfach nicht....

LG Irina

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

Ok, das heisst, in den Übungen war es ok, diese Dateien in diesem Verzeichnis zu speichern....da hatte ja alles funktioniert....

Und wenn ich das jetzt richtig verstehe, dann sollte die Datei im Debug oder Release Ordner angelegt werden...und somit würde dann die Meldung verschwinden...

LG Irina

4.938 Beiträge seit 2008
vor 2 Jahren

Arbeitest du denn immer auf den gleichen Rechner?
Und bist du wirklich als User 'admin' angemeldet? Bzw. kannst du mit dem Explorer in diesen Pfad navigieren?

Es ist daher kein guter Code, wenn direkt absolute Pfade (als String-Literale) verwendet werden (da dies dann auf einem anderen Rechner und/oder mit anderen Anwendern nicht mehr funktioniert)! Schau dir daher mal die Methoden Environment.GetFolderPath (bei dir mit dem Parameter SpecialFolder.UserProfile) sowie Path.Combine (zum Zusammensetzen von Pfaden im Code) an.

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

Ich habe dies jetzt so gestaltet....
Die Datei ESA2IN habe ich in dem Projekt ESAAufgabe2 erstellt, diesen Pfad kopiert und in die Aufgabe eingefügt....
Die unbehandelte Ausnahme konnte ich damit beheben....juhu...
Der Code wird mir nur noch nicht richtig angezeigt.....dieser steht noch in einer Reihe.....soll aber untereinander stehen...da muss ich noch ein bisschen tüffteln.

Sieht zur Zeit so aus....
CC # # C C # # C #####C # # C ##### C C # # CC # #

Soll am Ende aber so aussehen....
CC # #
C C # #
C #####
C # #
C #####
C C # #
CC # #

Das bekomme ich hin....

Vielen Dank für eure Hinweise.....

LG Irina

C
33 Beiträge seit 2013
vor 2 Jahren

Man sollte Grundsätzlich zugriffe auf die Userordner Vermeiden. Da es je nach Berechtigungs Vergabe eben Probleme gibt.
Ich lege mir für sollche Testzwecke auf meinem Entwickler Rechner in C:\ ein Temp Verzeichniss an wo ich solche Sachen kurz Testen kann.
Für "richtige" Tests (unittest etc.) is allerdings der weg über zb. Das Projektverzechniss der passendere Weg, da dort auch ein Buildserver die Daten findet.

Wenn es wirklich im Userverzeichniss sein muss. Dann ist der weg wie es Th69 schreibt der Passende.

P
441 Beiträge seit 2014
vor 2 Jahren

Das klingt nach Wilhelm Büchner Hochschule... 🙂

Prinzipiell ist nichts falsches daran, den User Ordner zu nutzen, vor allem den Documents...
Ist "admin" dein eigener Benutzername oder der eines anderen?
In .NET gibt es die Möglichkeit den Benutzerordner auszulesen, dann ist der Ordner auf jeden Fall der richtige. SChau dir dafür Environment.GetFolderPath (Api-Docs) an.
Ich bin mir nicht sicher, aber eventuell kommt die Unauthorized Exception auch dann, wenn der Ordner nicht existiert(?), was ein Tippfehler sein könnte.