Laden...

File.Exists gibt False zurück, obwohl die Datei existiert

Erstellt von hypersurf vor 12 Jahren Letzter Beitrag vor 12 Jahren 5.488 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 12 Jahren
File.Exists gibt False zurück, obwohl die Datei existiert

Hi Leute,

ich habe ein seltsames Phänomen was ich mir nicht erklären kann.
Ich frage einer Methode ab ob die Datei die gelesen werden soll überhaupt existiert.


if (File.Exists(pFilename))

Komischerweise gibt mir die Funktion immer False wieder. Die Dateien die abgefragt werden existieren aber. Kopiere ich den Inhalt von pFilename per Direktfenster 1:1 in die Zwischenablage und rufe diesen dann per Start -> Ausführen auf, wird die Datei direkt geöffnet.

Die Datei liegt auf einem Netzlaufwerk, welches über den Laufwerksbuchstaben angesprochen wird. Im Arbeitsplatz wird das Laufwerk auch korrekt und als verbunden angezeigt. Zugriff ist ohne Einschränkungen möglich.

Habt Ihr eine Idee, woran das liegen könnte?

Folgendes funktioniert übrigens tadellos:


FileInfo fi = new FileInfo(pFilename);
Hinweis von herbivore vor 12 Jahren

Unabhängig von der konkreten Frage sollte man, wenn man an File.Exists denkt, immer folgende Warnung im Hinterkopf haben: PicutreBox - Ungültiger Parameter [und warum File.Exists gefährlich und meistens sinnlos ist]

916 Beiträge seit 2008
vor 12 Jahren

Hallo hypersurf,

Folgendes funktioniert übrigens tadellos:

   
FileInfo fi = new FileInfo(pFilename);  
  

Das funktioniert auch mit Files die nicht existieren. An der FileInfo gibt es allerding auch eine Property Exist, kannst du mal prüfen ob die auf true steht in deinem Fall?

Again what learned...

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 12 Jahren

Die Eigenschaft liefert False zurück.

Wenn ich versuche die Datei per File.Copy zu kopieren gibt es eine DirectoryNotFoundException:

Ein Teil des Pfades "G:\NET\XXX.NET\Serveranwendung\Beispieldaten\beispielredu XXX\Bilder\084045.jpg" konnte nicht gefunden werden.

Der Pfad beinhaltet nur

G:\\NET\\XXX.NET\\Serveranwendung\\Beispieldaten\\beispielredu XXX\\Bilder\\084045.jpg

Die Backslashes vorne und hinten fügt die Meldung der Exception anscheinend ein.

M
118 Beiträge seit 2008
vor 12 Jahren

Die Backslashes werdne mMn nicht durch die Eception angefügt.

was sagt denn der Debugger, bevor die Eception geworfen wird, wie pFilename aussieht?

btw mit @ kannst du wunderbar escapen

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 12 Jahren

Der Pfad beinhaltet nur

G:\\NET\\XXX.NET\\Serveranwendung\\Beispieldaten\\beispielredu XXX\\Bilder\\084045.jpg  

Ich vermute, dass es was damit zu tun hat, dass die Anwendung als Dienst läuft. Zwar habe ich den Dienst gerade auch mal als Domänenadmin laufen lassen, funktioniert aber trotzdem nicht.

Liegen die Dateien lokal, klappts :>

916 Beiträge seit 2008
vor 12 Jahren

Ist das ein gemounteder Drive? Weil wenn ja, dann versteh ich überhaupt nicht, warum die Datei nicht siehst. Hast du mal versucht mit DirectoryInfo das root des Drives zu holen, und zu schauen ob das bei Exist true zurück liefert?

Again what learned...

U
1.688 Beiträge seit 2007
vor 12 Jahren

Ich vermute, dass es was damit zu tun hat, dass die Anwendung als Dienst läuft

Das kann gut sein, falls nämlich z. B. der ausführende Nutzer keine Rechte im Netzwerk hat.

M
10 Beiträge seit 2010
vor 12 Jahren

Hallo Zusammen

Bin mir zwar nicht sicher aber ich glaube das es daran liegt das deine Anwendung ein Dienst ist.

Problem ist das ein Dienst ja eigentlich unabhängig von einer Benutzer Anmeldung funktionieren soll.

Dein Verbindung zum Netzlaufwerk wird nun aber durch den angemeldeten Benutzer hergestellt und ist wahrscheinlich deswegen für den Dienst nicht verfügbar.

Vielleicht solltest du auf die Datei nicht über dein Netzlaufwerk zugreifen sondern über den UNC-Pfad (\server\Pfad\Dateiname)

Gruß
mulltonne

656 Beiträge seit 2008
vor 12 Jahren

Vorsicht, wenn die Applikation als Dienst läuft (oder auch als anderer Benutzer, als euer aktuell angemeldeter Benutzer) stehen Netzwerklaufwerke möglicherweise nicht zur Verfügung (außer, ihr habt sie selber per Code eingemappt).

Zur Sicherheit per UNC (oder gleich einem lokalen Laufwerk) versuchen; an File.Exists oder eventuell anderen Sachen im Framework wirds nicht liegen dass es nicht funktioniert.

1.815 Beiträge seit 2005
vor 12 Jahren

Hallo!

Ich kann Bhaal nur zustimmen: Da ein Dienst auch läuft, wenn kein Benutzer (mit gegebenenfalls entsprechenden Netzlaufwerksverbindungen) angemeldet sein muss, sollten bei sämtlichen nicht-lokalen Zugriffen UNC-Pfade verwendet werden.

Dies ist allerdings eher ein Vorschlag zur Vermeidung von möglichen Problemen, da ich nicht sgen kann, wie windows den Netzwerk-Zugriff auf Datenträger für Dienste regelt.

Nobody is perfect. I'm sad, i'm not nobody 🙁