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
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."
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/>
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...
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,...
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...
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...
> 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
So:
G:\LW1\Debug\Daten\Dokumente\00108\Bilder\P7120004.JPG
Kein doppelten Backslashes!
Gruss
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...
> 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
> 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:
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,..
> 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.
Wirklich sinnvoll!
> >"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
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
'(FileAttributes) (filePath.Attributes - FileAttributes.ReadOnly)' finde ich
etwas gewagt.
> 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.
>>[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;
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/
>>>> [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);
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
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.