2017-04-18 6 views
0

Ich führe das Projekt auf dem Visual Studio 2015, als ich versuchte, die PDF zu lesen, gibt es mir den folgenden Fehler;System.IO.File.ReadAllBytes Zugriff auf den Pfad verweigert

Der Zugriff auf den Pfad 'E: \ FILE \ FILEUPLOAD \ InnerFile \ File' wird verweigert.

Funktion Defination

var cd = new System.Net.Mime.ContentDisposition { FileName = "PDF.pdf", Inline = true }; 

       string contentType = MimeMapping.GetMimeMapping("PDF.pdf"); 
    Response.AppendHeader("Content-Disposition", cd.ToString()); 
    var innerPath = "InnerFile/File" ; 

       FileInfo fi = new FileInfo(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath); 

      return File(bytes, contentType); 

HINWEIS:

  • Volle Erlaubnis Benutzer gegeben
  • Körperlich Datei vorhanden

Ich verstehe nicht, was jetzt zu tun ist, bitte helfen!

enter image description here

+0

Verwenden Sie keine String-Verkettung, wenn Sie mit Pfaden wie diesem '' 'new FileInfo (PDFUploadRootPath + innerPfad +" /PDF.pdf ") arbeiten;' '', verwenden Sie '' '' Path.Combine'''. Ich sehe, dass Sie Schrägstrich '' '/' '' nicht Backslash haben - vorausgesetzt, Sie laufen auf Windows, ist es ein falsches Trennzeichen. –

+0

Ja, m läuft es unter Windows ... Datei wird gefunden, wenn 'fi.Exists' aktiviert ist. Es ist also kein Problem mit dem Pfad, der den Fehler beim Lesen von @MarcinZablocki gibt. –

+1

Wenn Sie die Datei aus dem Pfad '' 'PDFUploadRootPath + innerPath +" /PDF.pdf "' '' lesen wollen, tun Sie das nicht in der nächsten Zeile: '' 'System.IO.File.ReadAllBytes (PDFUploadRootPath + innerPath)' ''. –

Antwort

1

Ihre FileInfo Instanz in der Tat Referenzen ‚E: \ FILE \ Fileupload \ InnerFile \ File \ pdf.pdf ‚:

FileInfo fi = new FileInfo(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

aber bei dem Versuch, den Inhalt der Datei lesen Sie die Dateinamen vergessen haben, und verwenden Sie nur den Pfad 'E: \ Datei \ Fileupload \ InnerFile \ File':

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath); 

So fügen Sie die Dateinamen auch alle Datei Bytes zum Lesen:

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

Darüber, wie andere in den Kommentaren erwähnt haben, Sie wirklich Path.Combine verwenden sollten zusammen Pfad Teile zu kleben, nicht einfach String-Verkettung ...

+0

AHHHHHHH, Danke Kumpel, das war ein dummer Fehler :( –

0

Versuchen anstelle von Byte-Array mit Filestream für die PDF-Datei zu lesen.

FileStream templateFileStream = File.OpenRead(filePath); 
      return templateFileStream; 

Überprüfen Sie auch (durch Code), wenn der Benutzer die Berechtigung zum Verzeichnis oder Pfad schreiben hat:

public static bool HasUserWritePermission(String path, String NtAccountName) 
    { 
     DirectoryInfo di = new DirectoryInfo(path); 
     DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All); 
     AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount)); 
     Boolean hasPermission = false; 
     //Go through the rules returned from the DirectorySecurity 
     foreach (AuthorizationRule rule in rules) 
     { 
      //If we find one that matches the identity we are looking for 
      if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase)) 
      { 
       //Cast to a FileSystemAccessRule to check for access rights 
       if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0) 
       { 
        hasPermission = true; 
       } 
       else 
       { 
        hasPermission = false; 
       } 
      } 
     } 
     return hasPermission; 
    } 
Verwandte Themen