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
Hallo Irina,
kannst du bitte ein paar mehr Infos zur Ausnahme geben?
Hallo,
welche genaue Ausnahme (Exception
) ist es denn? Schau mal unter "Ausnahmen" in der Doku dazu: File.Open.
Hallo zusammen,
ich habe ein Screenshot mit der Fehlermeldung angehangen....
LG Irina
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.
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
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
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.
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
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.
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.