2017-12-29 60 views
0

Ich versuche, einen UNC-Dateipfad auf einer NAS-Dateifreigabe zu überprüfen, bevor Sie Dateien darin kopieren. Ich verstehe, dass ich einen Fehler auf der tatsächlichen Kopie selbst bekommen kann (und ich bin, da ich zurzeit keine Erlaubnis habe, dort zu schreiben), aber ich möchte auch vorher überprüfen, wann das Programm startet, um den Benutzer wissen zu lassen, ob oder sie können Dateien nicht dorthin kopieren, bevor sie es versuchen.C# - Überprüfen Ordner Schreibberechtigungen auf UNC-Dateifreigabe (Winforms)

Mein Problem ist, dass dies immer wahr zurückgibt, wenn ich sicher weiß, dass ich keine Schreibberechtigungen habe, da ich Dateien dort im Dateiexplorer nicht kopieren und einfügen kann und die eigentliche Datei.Copy in C# zurückgibt "Zugriff auf den Pfad '\ nascharf06 \ uas \ to_be_processed \ Andy \ A.jpg' wird verweigert".

Warum wird das immer wahr?

string folder = @"\\nascharf06\uas\to_be_processed\Andy"; 
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Write, folder); 
     try 
     { 
      f2.Demand(); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 

Antwort

1

prüfen FileIOPermissionAcces.PathDiscovery & FileIOPermissionAccess.Read & FileIOPermissionAccess.Write - Ihr Zugang könnte blockiert werden, weil Sie keine accesss haben auch dort zu lesen.

Wenn das nicht hilft, können Sie einen einzigen "Dummy-Write" in einem try - catch verpackt verwenden, um sicherzustellen, dass Sie schreiben können. Wenn Sie keine Löschrechte haben, können Sie Ihre Dummy-Schreibdatei möglicherweise nicht entfernen.

Das könnte Sie auch helfen: how-can-you-easily-check-if-access-is-denied-for-a-file-in-net (SO- Antworten auf ähnliche Frage)

+0

ich Zugang habe dort über C# zu lesen oder auf Datei Explorer. Ich habe dort keinen Zugriff, um Dateien zu schreiben und zu kopieren, und das ist jetzt richtig. Mein Problem ist, dass die Funktion in meinem ursprünglichen Post True zurückgibt, als ob ich dort schreiben könnte, aber das sollte stattdessen false zurückgeben, da ich Dateien dort nicht über C# von File Explorer kopieren kann. Ich frage mich, warum dies wahr anstatt falsch wie es sollte. – Andy

+0

@Andy - nur zum Kichern, nehmen Sie eine Datei von dort und speichern Sie sie lokal. modifiziere es und kopiere es zurück. Meine Vermutung ist, dass Sie WRITE, aber nicht CREATE-Berechtigungen haben - behalten Sie eine unmodifizierte Kopie zur Seite, damit Sie diese über Ihre modifizierte Kopie kopieren können –