C# UnauthorizedAccessException

digger85

Cadet 1st Year
Registriert
Mai 2010
Beiträge
13
hallo zusammmen

habe folgendes problem:

ich möchte gerne den text aus einer richtextbox in einer datei an einem bestimmten ort (vorzugsweise desktop, man soll aber den pfad auswählen können) speichern.

dazu habe ich ein fenster mit einem button und einer richtextbox erstellt und folgenden code geschrieben:

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string Desktop = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
FolderBrowserDialog PfadAuswahl = new FolderBrowserDialog();
PfadAuswahl.Description = "Speicherort der Datei";
PfadAuswahl.SelectedPath = @Desktop;
DialogResult Fenster = PfadAuswahl.ShowDialog(this);

if (Fenster == DialogResult.OK)
{
try
{
richTextBox1.SaveFile(PfadAuswahl.SelectedPath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}

leider bekomme ich immer die exeption UnauthorizedAccessException bzw. der zugriff auf den pfad C:\..... wurde verweigert.
hab schon das halbe web durchforstet, aber leider finde ich keine lösung.
noch ein hinweis: ich benutze windows 7 und visual c# express 2010.
vielen dank schonmal
 
Code:
PfadAuswahl.SelectedPath = @Desktop;

warum das @ ?

Das ist an dieser stelle bloedsinn, siehst du am besten indem du debuggst ?

Das ist das erste was mir ins auge gefallen ist...

lg

oli

EDIT: Die zeile sieht auch merkwurdig aus
Code:
string Desktop = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
Fehlt da nicht ein param?
 
Zuletzt bearbeitet:
ja ok das @ kann man auch weglassen. trotzdem bekomm ich immer noch die exeption
 
Die zeile sieht auch merkwurdig aus
Code:
string Desktop = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
Fehlt da nicht ein param?

Der dateiname...
 
Bekommst du die Fehlermeldung direkt im richTextBox1.SaveFile bzw. wo willst du denn hin speichern.
Bei Windows 7 solltest du bedenken, dass bei aktiver Benutzerkontensteuerung du nur normale Userrechte hast und der Scrhreibzugriff auf die meisten Stellen im Sytem gesperrt ist (unter anderem direkt auf C:\ oder C:\Programme). Schau einmal, ob der Fehler auch kommt, wenn du auf den Desktop speichern willst.
Es wäre auch hilfreich, wenn du die ganze Exception inkl. Stack Trace posten könntest (ex.toString)
 
Windows 7 erlaubt keinen direkten Schreibzugriff mehr auf C:\

Mache einfach einen Unterordner und pack die Datei da rein
 
olampl schrieb:
Fehlt da nicht ein param?

weiß jetzt nicht was du meinst. das programm funktioniert aber soweit. wie gesagt es verweigert nur immer die zugriffe auf die einzelnen pfade. wahrscheinlich bräuchte man irgendwie schreibrechte, aber wie man sowas in c# realisiert weiß ich nicht. deshalb frag ich ja :D
 
Code:
string Desktop = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"asdfasdf.txt");
FolderBrowserDialog PfadAuswahl = new FolderBrowserDialog();
PfadAuswahl.Description = "Speicherort der Datei";
PfadAuswahl.SelectedPath = Desktop;
DialogResult Fenster = PfadAuswahl.ShowDialog(this);

//if (Fenster == DialogResult.OK)
{
try
{
    File.Create(Desktop);
//richTextBox1.SaveFile(PfadAuswahl.SelectedPath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

so gehts, bei mir.

@tRITON: er schreibt nicht auf C sondern auf seinen Desktop

EDIT:
olampl schrieb:
Code:
string Desktop = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
Der dateiname...

digger85 schrieb:
weiß jetzt nicht was du meinst. das programm funktioniert aber soweit. wie gesagt es verweigert nur immer die zugriffe auf die einzelnen pfade. wahrscheinlich bräuchte man irgendwie schreibrechte, aber wie man sowas in c# realisiert weiß ich nicht. deshalb frag ich ja :D

naja auf deinem desktop wirst du wohl alle schreibrechte haben...

wie kann dein Programm funktionieren? Die Methode 'System.IO.Path.Combine' benotigt zwei parameter, du gibts ihr jedoch nur einen..

EDIT: Aenderst du den Speicherpfad?
 
Zuletzt bearbeitet:
olampl schrieb:
wie kann dein Programm funktionieren? Die Methode 'System.IO.Path.Combine' benotigt zwei parameter, du gibts ihr jedoch nur einen..

hast recht aber es lief bei mir komischer weise :)

mit file.create ist ne gute idee aber wie bekomm ich jetzt den inhalt der richtextbox in die datei?

edit: aber jetzt kann ja der pfad nicht mehr ausgesucht werden.

hiermit:

System.IO.File.Create(PfadAuswahl.SelectedPath);

bekomm ich wieder den gleichen fehler.
 
Zuletzt bearbeitet:
innerhalb des if-statement den aktuellen Pfad vom browse dialog abfragen.

Diesen mit dem Filename kombinieren...

Du kannst auch die Richtextbox nehmen, ich war nur faul und habe mir keine eingebaut.
Ergänzung ()

digger85 schrieb:
System.IO.File.Create(PfadAuswahl.SelectedPath);

bekomm ich wieder den gleichen fehler.
:evillol:
Weil PfadAuswahl.SelectedPath nur den Pfad liefert, aber keinen dateinamen ;)

EDIT: Bitte beginne variablennamen mit einem kleinen buchstaben ;)
 
so in der art:

string speicherort = System.IO.Path.Combine(PfadAuswahl.SelectedPath, "test.txt");

ja es funktioniert :)

tausend dank :D

der einzige fehler war der blöde dateiname
 
Zuletzt bearbeitet:
Zurück
Oben