2015-09-22 5 views
14

Ich habe ein Problem mit der Art und Weise File.Exists() (funktioniert nicht): Wenn ich es verwende, behauptet es, dass die Datei nicht existiert (aus dem direkten Fenster):Running Visual Studio als Administrator zeigt keine zugeordneten Netzlaufwerke

filePath 
"P:\\poolman\\LY21\\2015\\LY21_2015-03-25_03.xml" 
File.Exists(filePath) 
false 

Aber wenn ich kopieren/den Dateipfad zu einem Explorer-Fenster einfügen url (Entfernen der Flucht \) es die Datei öffnet.

So File.Exists() behauptet, dass eine vorhandene Datei nicht existiert, die mich Fehler.

Es geht nicht um die length of the path (die 43) und FileInfo ist nicht eine bessere Option als vorgeschlagen here.

Hier ist das Ergebnis der FileInfo Prüfung:

var f = new FileInfo(filePath); 
{P:\poolman\LY21\2015\LY21_2015-03-25_03.xml} 
    base: {P:\poolman\LY21\2015\LY21_2015-03-25_03.xml} 
    _name: "LY21_2015-03-25_03.xml" 
    Directory: {P:\poolman\LY21\2015} 
    DirectoryName: "P:\\poolman\\LY21\\2015" 
    Exists: false 
    IsReadOnly: true 
    Length: '(var f = new FileInfo(filePath);).Length' threw an exception of type 'System.IO.FileNotFoundException' 
    Name: "LY21_2015-03-25_03.xml" 

Wie kann ich damit umgehen?

+4

Erforschen Sie die Dokumentation: _ 'true' **, wenn der Aufrufer die erforderlichen Berechtigungen hat ** und Pfad den Namen einer vorhandenen Datei enthält_. Welche Berechtigung haben die Dateien und für welchen Benutzer läuft Ihr Prozess? Ich nehme an, dass Sie das in einem ASP.NET-Kontext ausführen, der nicht über die entsprechenden Berechtigungen verfügt. – CodeCaster

+0

@PaulZahra Dies ist ein zugeordnetes Laufwerk –

+0

@CodeCaster VS läuft im Admin-Modus, aber das kann Ihre Frage nicht beantworten ... Und das erklärt mir nicht die FileInfo.Exists wird falsch –

Antwort

21

Wenn Sie einen Prozess (z. B. Visual Studio) starten (wie Sie in Kommentaren behaupten), wird er nicht als Ihr aktueller Windows-Benutzer, sondern als Administrator ausgeführt.

Der Administrator verfügt nicht über die Laufwerkszuordnungen, die Ihr Benutzer besitzt. Ihr Visual Studio kann das Laufwerk P: überhaupt nicht sehen, da dieses Mapping für Ihren Benutzer spezifisch ist.

Siehe How to access network shares from an elevated process in Windows 7?: Wenn dieser Fehler von Ihrem aktuellen Benutzer mit dem P: Laufwerk zugeordnet zu einem Netzlaufwerk verursacht wird, können Sie den UNC-Pfad für die Freigabe statt: \\server\share\file.xml, wo P: zu \\server\share\ abgebildet würde.

+0

Dies scheint die richtige Antwort zu sein. Wie kann ich dieses Laufwerk dem Admin zuordnen? –

+2

Nicht zuordnen, stattdessen den vollständigen UNC-Pfad verwenden, z. '\\ server \ folder \ path \ file.txt' – DavidG

+0

@DavidG Es ist nicht so einfach, weil ich mit ein paar Sachen zu tun habe, die ich nicht ändern werde ... Aber jetzt, wo ich weiß warum, kann ich in Frieden weitermachen –

Verwandte Themen