Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

File.Delete Error

122 views
Skip to first unread message

AWaning

unread,
Feb 1, 2008, 10:50:14 AM2/1/08
to
Hallo

ich versuche gerade mit dem Befehl

File.Delete(strFilename);

eine Datei zu löschen. Es kommt eine Fehlermeldung

Der Zugriff auf den Pfad
G:\LW1\\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG wurde verweigert.


Mit dem Explorer kann ich die Datei aber löschen.

Wie kann das sein ?

Danke
Andreas


Kerem Gümrükcü

unread,
Feb 1, 2008, 11:15:23 AM2/1/08
to
Halo Andreas,

richte mal dein Augenmerk auf den Pfad deiner Datei
in deinem Programm:

>Der Zugriff auf den Pfad
>G:\LW1\\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG wurde verweigert.

Schau mal was zwischen dem LW1 und dem Debug Ordner steht. Du hast
eine doppletes Backslash stehen und so kann das .NET und das Windows
das nicht finden, weil es keine gütltige Pfadangabe ist,...

Grüße

Kerem

--
-----------------------
Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Microsoft Live Space: http://kerem-g.spaces.live.com/
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------
"This reply is provided as is, without warranty express or implied."


Herfried K. Wagner [MVP]

unread,
Feb 1, 2008, 11:20:14 AM2/1/08
to
"AWaning" <awa...@gmx.de> schrieb:

> ich versuche gerade mit dem Befehl
>
> File.Delete(strFilename);
>
> eine Datei zu löschen. Es kommt eine Fehlermeldung
>
> Der Zugriff auf den Pfad
> G:\LW1\\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG wurde verweigert.

Ist der doppelte Backslash so gewollt?

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

AWaning

unread,
Feb 1, 2008, 11:25:31 AM2/1/08
to
Hallo Kerem

ich hab das falsch abgeschrieben, richtig ist:


G:\LW1\\Debug\\Daten\\Dokumente\\00108\\Bilder\\P7120004.JPG wurde
verweigert.


Hast du denn eine Idee wie das kann, dass die Meldung "wurde verweigert"
kommen kann ?

Danke
Andreas


"Kerem Gümrükcü" <kare...@hotmail.com> schrieb im Newsbeitrag
news:e09gp2OZ...@TK2MSFTNGP03.phx.gbl...

Kerem Gümrükcü

unread,
Feb 1, 2008, 11:39:14 AM2/1/08
to
>Hast du denn eine Idee wie das kann, dass die Meldung "wurde verweigert"
>kommen kann ?

Ja, da gibt es einige Möglichkeiten, aber zwei sind die
gängigsten: Die einfachste: Der Benutzer der darauf zugreift,
also der Benutzerkontext, hat einfach keine Rechte zu löschen.
Die zweite: Ein anderes Programm (oder dein eigenes!) hat
ie Datei exklusiv geöffnet und es besteht ein gültiges Datei-Handle
auf die Datei und deshalb verweigert .NET (eigentlich Windows)
das löschen der Datei,...

Wenn Du in deinem Programm, oder orgendwo anders die
Datei öffnest, dann beende den Zugriff auch darauf, in dem
Du die Datei "schliesst",...erst dann kannst Du sie löschen.
Das ist die wahrscheinlichste Sache unter Entwicklern oder
Code,...

AWaning

unread,
Feb 1, 2008, 11:44:08 AM2/1/08
to
Hier mein Code:


try
{
string strFiles =
"g:\\LW1\\WaningAllgemein\\Dokumente\\00108\\Bilder\\P7120004.JPG";
File.Delete(strFiles);
}
catch (Exception ee)
{
string strMsg = string.Format("Fehler beim löschen des
Bildes Grund={0}", ee.Message);
MessageBox.Show(strMsg);
}

Eskommt die Meldung Zugriff verweigert, obwohl ich aus dem Explorer heraus
die Datei loeschen kann

Wie kann das kommen ??

Danke Andreas


"Herfried K. Wagner [MVP]" <hirf-spa...@gmx.at> schrieb im Newsbeitrag
news:%2369mT5O...@TK2MSFTNGP06.phx.gbl...

AWaning

unread,
Feb 1, 2008, 12:06:53 PM2/1/08
to
mit welchem Benutzeraccount greift denn ein Programm auf die Datei ?

Die Datei ist nicht geönnet und wird auch sonst nicht benutzt. Also das muss
schon was mit
Berechtigung zusammenhängen.

Aber ich wüsste nicht wie ich bei der statischen Methode delete noch was
einstellen soll


Danke
Andreas


"Kerem Gümrükcü" <kare...@hotmail.com> schrieb im Newsbeitrag

news:%23Vln%23DPZI...@TK2MSFTNGP06.phx.gbl...

Frank Dzaebel

unread,
Feb 1, 2008, 12:16:04 PM2/1/08
to
Hallo Andreas,

> Hier mein Code:
> Es kommt die Meldung Zugriff verweigert

Exakte komplette Fehlermeldung bitte!
Eine UnauthorizedAccessException?
Welches Betriebssystem / .NET Version?

Eine hier bereits vermutete Ursache
kann es nicht sein (da käme:
Der Prozess kann nicht auf die Datei [...] zugreifen,
da sie von einem anderen Prozess verwendet wird.
und nicht "Zugriff verweigert".

Eher:

[Fehlermeldung "Zugriff verweigert" bei dem Versuch, eine Datei zu löschen]
http://support.microsoft.com/kb/298345/de

zumal G: ja nun auch wohl nicht Dein
lokales Laufwerk ist.

Prüfe ggf. einmal mit File.Exists
ab, ob der Pfad korrekt ist.


ciao Frank
--
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Michael

unread,
Feb 1, 2008, 12:26:15 PM2/1/08
to
Hallo,

So:


G:\LW1\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG

Kein doppelten Backslashes!

Gruss

AWaning

unread,
Feb 1, 2008, 12:31:33 PM2/1/08
to
Hallo Frank,

ich hab gerade gesehen, dass die Datei schreibgeschütz ist.
Wenn ich den Schreibschutz entferne, dann geht es.

Der Explorer löscht die Datei ohne eine Meldung,
kann ich das mit .Net20 auch erreichen ?
(Ich kann vom Kunden nicht verlangen, dass er den Schreibschutz von Hand
ändern)


Danke
Andreas


"Frank Dzaebel" <PostAddFranksSeitePunktDe> schrieb im Newsbeitrag
news:C2FC16A8-647F-4D53...@microsoft.com...

Frank Dzaebel

unread,
Feb 1, 2008, 12:34:39 PM2/1/08
to
Hallo Martin,

> So:
> G:\LW1\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG
> Kein doppelten Backslashes!

Nein, in C# ist das schon richtig,
also entweder so:

"g:\\LW1\\Debug"

oder

@"g:\LW1\Debug"


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Frank Dzaebel

unread,
Feb 1, 2008, 12:44:06 PM2/1/08
to
Hallo Andreas,

> ich hab gerade gesehen, dass die Datei schreibgeschütz ist.
> Wenn ich den Schreibschutz entferne, dann geht es.

Na, da hat mein Tip ja gepasst :-)
"Stellen Sie sicher, dass der Datenträger weder voll noch
schreibgeschützt ist"
http://support.microsoft.com/kb/298345/de

> Der Explorer löscht die Datei ohne eine Meldung,
> kann ich das mit .Net20 auch erreichen ?
> (Ich kann vom Kunden nicht verlangen, dass er den Schreibschutz von Hand
> ändern)

Ungeprüft etwa:

[Schreibschutz einer Datei entfernen]
http://www.dotnet-snippets.de/dns/code.aspx?ID=452

Bei Ordnern kann man sich leicht von der
Anzeige im Explorer täuschen lassen:

http://groups.google.com/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/077d641eac9b55c7

Kerem Gümrükcü

unread,
Feb 1, 2008, 1:18:14 PM2/1/08
to
Hallo Andreas,

das dein Explorer keine Rückmeldung zum löschen bringt
ist schon etwas seltsam, iegentlich sollte da zumindest ein
Hinweis kommen,...naja, egal,..

File.SetAttributes und File.GetAttribues sind deine
Freunde,..

Frank Dzaebel

unread,
Feb 1, 2008, 2:32:42 PM2/1/08
to
Hallo Kerem,

> das dein Explorer keine Rückmeldung zum
> löschen bringt ist schon etwas seltsam,

Das ist unterschiedlich bei den OS.
Bei Vista kommt z.B. nur die Meldung,
die auch bei Löschen von Dateien *ohne*
Schreibschutz kommt:
"Möchten Sie die Datei wirklich in den Papierkorb verschieben?"

> File.SetAttributes und File.GetAttribues

Hatten wir schon. Mein verlinktes Snippet :

[Schreibschutz einer Datei entfernen]
http://www.dotnet-snippets.de/dns/code.aspx?ID=452

funktioniert.

Kerem Gümrükcü

unread,
Feb 1, 2008, 3:15:54 PM2/1/08
to
>"Möchten Sie die Datei wirklich in den Papierkorb verschieben?"


Wirklich sinnvoll!

Frank Dzaebel

unread,
Feb 1, 2008, 3:36:33 PM2/1/08
to
Hallo Kerem,

> >"Möchten Sie die Datei wirklich in den Papierkorb verschieben?"
>
> Wirklich sinnvoll!

Ja, letztlich hier wohl die Richtlinie: "Avoid over-communication"
angewandt, weil sonst wohl niemand den Text liest:

[User Interface Text]
http://msdn2.microsoft.com/en-us/library/aa974176.aspx

Ulf Kadner

unread,
Feb 1, 2008, 7:01:36 PM2/1/08
to
Frank Dzaebel schrieb:

>> So:
>> G:\LW1\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG
>> Kein doppelten Backslashes!
>
> Nein, in C# ist das schon richtig,
> also entweder so:
>
> "g:\\LW1\\Debug"
>
> oder
>
> @"g:\LW1\Debug"

Hallo Frank"

Mit Deiner aussage hast Du durchaus recht. Aber im Bezug auf des OPS
Antwort nicht, denn der schrieb:

| G:\LW1\\Debug\\Daten\\Dokumente\\00108\\Bilder\\P7120004.JPG

Der unterschied ist zwar marginal aber vorhanden.

Allerdings ist das Problem ja gelöst.

MfG, Ulf

Herfried K. Wagner [MVP]

unread,
Feb 1, 2008, 7:51:02 PM2/1/08
to
"Frank Dzaebel" <tcnt.D...@daimlerchrysler.com> schrieb:

>[Schreibschutz einer Datei entfernen]
>http://www.dotnet-snippets.de/dns/code.aspx?ID=452

'(FileAttributes) (filePath.Attributes - FileAttributes.ReadOnly)' finde ich
etwas gewagt.

Frank Dzaebel

unread,
Feb 2, 2008, 4:11:13 AM2/2/08
to
Hallo Ulf,

> Mit Deiner aussage hast Du durchaus recht. Aber im Bezug auf des OPS
> Antwort nicht, denn der schrieb:

> Der unterschied ist zwar marginal aber vorhanden.

Würde ich nicht so sehen.
Der OP (Andreas) hat in seinem Code, den er
gepostet hat, alles richtig gemacht:
http://groups.google.com/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/f79aca10dbcac002
[17 Uhr 44]. In seinem Posting (Du nennst es Bezug) wäre
im Gegenteil eher ein Backslash zu wenig ("G:\LW1"):
http://groups.google.com/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/aab47ee4eb67fa27

Die Aussage von Michael "Keinen doppelten Backslashes"
ist eh falsch, da die Verbatim-Schreibweise vom OP nicht
benutzt wurde (auch sonst von keinem). Hier eine Referenz
aus der Spezifikation:

[2.4.4.5 String literals (C#)]
http://msdn2.microsoft.com/en-us/library/aa691090.aspx

Also z.B. so: "g:\\LW1\\Debug", oder so: @"g:\LW1\Debug".
Michael hat um [18 Uhr 26] gepostet und u.a. wahrscheinlich
nicht den ganzen Thread gelesen, naja seis drum, seine
Aussage ist halt falsch, weswegen ich das noch angewerkt habe.

Weil der Pfad des OP (Andreas) korrekt ist, lag es ergo
auch nicht an dem Pfad, sondern an dem Schreibschutz.

Frank Dzaebel

unread,
Feb 2, 2008, 4:26:40 AM2/2/08
to
Hallo Herfried,

>>[Schreibschutz einer Datei entfernen]
>>http://www.dotnet-snippets.de/dns/code.aspx?ID=452
>
> '(FileAttributes) (filePath.Attributes - FileAttributes.ReadOnly)' finde
> ich etwas gewagt.

ist mir auch aufgefallen, aber funktioniert hier schon.
Ich würde es so schreiben:

attribute = filePath.Attributes & ~FileAttributes.ReadOnly;

Thorsten Doerfler

unread,
Feb 2, 2008, 6:38:33 AM2/2/08
to
Frank Dzaebel schrieb:

>>> [Schreibschutz einer Datei entfernen]
>>> http://www.dotnet-snippets.de/dns/code.aspx?ID=452
>> '(FileAttributes) (filePath.Attributes - FileAttributes.ReadOnly)' finde
>> ich etwas gewagt.
>
> ist mir auch aufgefallen, aber funktioniert hier schon.

Ja, es funktioniert. Nur mitunter anders, als gewünscht, wenn das
Attribut nicht gesetzt ist. Aber das muss ich Dir ja hoffentlich nicht
sagen, oder? ;-)

Thorsten Dörfler
--
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Frank Dzaebel

unread,
Feb 2, 2008, 9:50:44 AM2/2/08
to
Hallo Thorsten,

>>>> [Schreibschutz einer Datei entfernen]
>>>> http://www.dotnet-snippets.de/dns/code.aspx?ID=452

Ja, das Snippet ist falsch, da hast Du recht.
Man muss meinen Vorschlag (o.ä.) nehmen mit: & ~FileAttributes.ReadOnly

Hier das korrigierte Snippet:

/// <summary>Setzt das Schreibschutz-Attribut einer Datei.</summary>
/// <param name="pfad">Kompletter Pfad.</param>
/// <param name="schreibgeschützt">true, für schreibgeschützt.</param>
private static void SchreibschutzSetzen(string pfad, bool schreibgeschützt)
{
FileInfo filePath = new FileInfo(pfad);
FileAttributes attribute = filePath.Attributes;
if (schreibgeschützt) attribute |= FileAttributes.ReadOnly;
else attribute &= ~FileAttributes.ReadOnly;
File.SetAttributes(filePath.FullName, attribute);

Thorsten

unread,
Mar 5, 2008, 3:51:01 PM3/5/08
to
Hi,

dass der Explorer die Datei ohne fragen löscht müsste unter XP normal sein,
da die Datei nur in den Recycler verschoben wird. Mach mal ein Shift +
Delete, dass sollte die Datei löschen und dann kommt auch eine Fehlermeldung.

Gruß Thorsten

Frank Dzaebel

unread,
Mar 5, 2008, 4:29:43 PM3/5/08
to
Hallo Thorsten,

wir benutzen hier den vollen Vor- und Zunamen als Usernamen.


> dass der Explorer die Datei ohne fragen löscht

> müsste unter XP normal sein, ...

Nein, das wäre es nicht.
Es ging übrigens gerade um Vista, nicht XP.
Unter Vista wird - wie bei XP - auch der "Papierkorb" benutzt.
Unter Vista kommen ggf. verständlichere Meldungen,
wie "unwiderruflich löschen" etc..
Unter XP (aktuell gepatcht) kommt auch eine Löschen-
Abfrage, dabei ist Shift oder Nicht-Shift irrelevant, es kommen
nur andere Texte.

Die Lösung des OP-Problems haben wir eh schon lange.
Ist der Schreibschutz gewesen.

0 new messages