C# Ordner mit Schreib- und Löschrechten erstellen

Thaxll'ssillyia

Captain
Registriert
Dez. 2007
Beiträge
3.568
Hi Community!

Könnt ihr mir helfen, wie man mit C# einen Ordner mit Vollzugriff erstellt?
Ich bekomme derzeit immer eine UnauthorizedAccessExeption für den Ordner, der sich unter C:\Spiele\ befindet.

Vielen Dank für Hilfe!

Gruß Thax
 
using System.IO;

DirectoryInfo di = new DirectoryInfo(@"C:\Spiele\Ordner");

if (di.Exist)
{
di.DirecoryAttributtes = DirecoryAttributtes.Normal;
}
 
Hey danke für die schnelle Antwort, leider kommt der Fehler immer noch...

Code:
Directory.CreateDirectory(Path);
DirectoryInfo DI = new DirectoryInfo(Path);
DI.Attributes = FileAttributes.Normal;

Code:
File.Delete(Path);

Der Zugriff auf den Pfad "C:\Spiele\Testordner" wurde verweigert.
 
Wahrscheinlich hat Dein Programm keine Rechte auf dme Ordner. Ist eine NTFS Geschichte. Schau mal in welchem Context Dein Programm läuft. Dem musst Du dann die entsprechenden Rechte geben.
 
Thaxll'ssillyia schrieb:
Code:
File.Delete(Path);

Cepheus77 schrieb:
Wahrscheinlich hat Dein Programm keine Rechte auf dme Ordner. Ist eine NTFS Geschichte. Schau mal in welchem Context Dein Programm läuft. Dem musst Du dann die entsprechenden Rechte geben.

Nee das ist sicher nicht das Problem, sondern das er einen Ordner erstellt , jedoch versucht ein File zu loeschen ;)

Code:
Directory.Delete(Path);

damit gehts, bitte variablen mit einem Kleinbuchstaben beginnen ;)
 
olampl schrieb:
damit gehts, bitte variablen mit einem Kleinbuchstaben beginnen ;)
wozu? falls sowas vorkommt, kann man doch problemlos auf System.IO.File/Path ausweichen. mich nervt z.b. diese konvention, alles mit kleinbuchstaben zu beginnen und dann jedes wort daran groß zu beginnen.
 
Nee das ist sicher nicht das Problem, sondern das er einen Ordner erstellt , jedoch versucht ein File zu loeschen

Nein, ich hab es hier falsch reinkopiert, ich habs schon richtig gemacht in C#:

Code:
Directory.CreateDirectory(Path);
DirectoryInfo DI = new DirectoryInfo(Path);
DI.Attributes = FileAttributes.Normal;

Code:
Directory.Delete(Path);

Geht trotzdem nicht
 
claW. schrieb:
wozu? falls sowas vorkommt, kann man doch problemlos auf System.IO.File/Path ausweichen. mich nervt z.b. diese konvention, alles mit kleinbuchstaben zu beginnen und dann jedes wort daran groß zu beginnen.

"damit gehts" war auf die loesung bezogen -> nicht auf die schreibweise der Variablen.

claW. schrieb:
mich nervt z.b. diese konvention, alles mit kleinbuchstaben zu beginnen und dann jedes wort daran groß zu beginnen.

ich finde sie gut, z.b. diese konvention... (verzeih ;) )

wird auch praktisch auch so gelebt, ist einach lesbarer und ist weniger fehleranfaellig -> auch finde ich es doof deshalb immer den gesamten namespace hinschreiben zu muessen, ganz zu schweigen davon wenn er einProperty machen will, soll er dann ein Underline vor den Namen setzen? Abgesehen finde ich auch den Varablennamen ein wenig ungluecklich, der Variablen den namen einer Klasse zu geben ist nicht wirklich sinnvoll , auch wenn es moeglich ist keine frage.

So hat jeder seine vorlieben, ich denke aber es ist lesbarer und vermeidet fehler

EDIT:
Thaxll'ssillyia schrieb:
Geht trotzdem nicht

mh ich verwende folgenden code

Code:
            Directory.CreateDirectory(@"C:\temp\test");
            DirectoryInfo di = new DirectoryInfo(@"C:\temp\test");
            di.Attributes = FileAttributes.Normal;
           

            Directory.Delete(@"C:\temp\test");

wo/wie wird deine Path Variable instanziert? poste das bitte auch

Path alleine ist eine .net Klasse, die kannst du nicht einafch als parameter fuer CreateDirectory verwenden und du brauchst einen gueltigen pfad...
 
Zuletzt bearbeitet:
wo/wie wird deine Path Variable instanziert? poste das bitte auch

kurz vorher.

Path alleine ist eine .net Klasse, die kannst du nicht einafch als parameter fuer CreateDirectory verwenden und du brauchst einen gueltigen pfad...

Hab ich jetzt nur als Beispiel geommen, kann zb auch das verwenden:

string FilePath = "C:\\Orddner";
//...
Directory.CreateDirectory(FilePath);
DirectoryInfo DI = new DirectoryInfo(FilePath);
DI.Attributes = FileAttributes.Normal;
//...
Directory.Delete(FilePath);
 
Zuletzt bearbeitet:
auch dein Code geht bei mir...

der ordner wird angelegt und wieder geloescht, bin admin auf meiner Maschine und UAC ist deaktiviert...

Dein source wird schwierigkeiten bereiten, sobald der Bnutzer deines Progs keine adminrechte besitzt...
 
aber das ist doch Mist...vielleicht sollte ich es per Kommandozeilenbefehle machen?
 
naja, dies dient der erhoehung der sicherheit, das nicht mehr ueberall ordner angelegt werden duerfen....
 
...oder liegt es daran, dass der Ordner Unterordner und Files beinhaltet?

naja, dies dient der erhoehung der sicherheit, das nicht mehr ueberall ordner angelegt werden duerfen....

Anlegen kann ich ihn ja, nur nicht löschen...

Edit: An Unterordnern/Files liegts auch nicht...
 
Zuletzt bearbeitet:
Evtl noch versteckte Dateien?
Systemdateien?
Oder ist der Schreibschutz an?

Probier doch mal einen frischen Ordner an einer anderen Stelle vom Programm aus zu erstellen und wieder zu löschen.
Mit nem sleep(10 sekunden) könntest du auch im Explorer (F5) beobachten ob der Ordner erstellt und gelöscht wird
 
Evtl noch versteckte Dateien?
Systemdateien?
Oder ist der Schreibschutz an?

nee, nix.

Es ist bei mir Laufwerksübergreifend, vermutlich liegts daran

Edit: Ich kanns nicht mal per Kommandozeile löschen, es kommt zwar noch:
Wollen sie x wirklich löschen J/N?
Drück ich allerdings J passiert nix...
 
Zuletzt bearbeitet:
Thaxll'ssillyia schrieb:
Es ist bei mir Laufwerksübergreifend, vermutlich liegts daran

verstehe ich ned, bei mir klappt es sogar bei einem gemappten LW (z) ohne probleme

Magst du mir deinen Source zukommen lassen, evtl. finde ich so den Fehler...
 
Danke, hat sich schon erledigt. Hatte im Filepath was falsch.

Alerdings habe ich nun bei großen Dateien den Fehler:

Ein Teil des Pfades (Filepath) konnte nicht gefunden werden.

Kleinere (bis 20 MB) klappen wunderbar, mit einer 2 GB großen .iso hats nicht geklappt...

Jemand ne Ahnung warum?

Edit: Ok, ich war zu blöd. Nächstes mal sollte C# ne Fehlermeldung rausbringen, wenn der Benutzer zu blöd zum Bedienen ist...
 
Zuletzt bearbeitet:
Zurück
Oben