Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
File.Exists gibt False zurück, obwohl die Datei existiert
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 520
Herkunft: Münster

Themenstarter:

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

beantworten | zitieren | melden

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);
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von hypersurf am .

Moderationshinweis von herbivore (06.06.2011 - 11:26:49):

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]

private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

Hallo hypersurf,
Zitat
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rollerfreak2 am .
Again what learned...
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 520
Herkunft: Münster

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hypersurf am .
private Nachricht | Beiträge des Benutzers
Mackerlama
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Thüringen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 520
Herkunft: Münster

Themenstarter:

beantworten | zitieren | melden

Zitat von hypersurf
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 :>
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hypersurf am .
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von hypersurf
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.
private Nachricht | Beiträge des Benutzers
mulltonne
myCSharp.de - Member



Dabei seit:
Beiträge: 10

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 656

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers